> Markdown version of [Routing](https://vaadin.com/docs/next/flow/integrations/spring/routing). Section index: [llms.txt](https://vaadin.com/docs/next/flow/llms.txt)

# Routing with Spring

Routing works the same way with Spring as it does in plain Vaadin applications. See [Routing and Navigation](https://vaadin.com/docs/next/flow/routing.md) for more.

This content applies to using Vaadin with both [Spring Boot](https://vaadin.com/docs/next/flow/integrations/spring/spring-boot.md) and [Spring MVC](https://vaadin.com/docs/next/flow/integrations/spring/spring-mvc.md).

## <a id="defining-routes"></a>Defining Routes

To handle the default route, all you need to do is define a component with the `@Route("")` annotation.

This example is defining `RootComponent` as the default root target using the `@Route` annotation:

```java
@Route("")
public class RootComponent extends Div {
    public RootComponent(){
        setText("Default path");
    }
}
```

You can also define all other possible routes in the same way as in standard Vaadin applications. See [Defining Routes with @Route](https://vaadin.com/docs/next/flow/routing.md) for more on using the `Router` class.

## <a id="using-dependency-injection-and-spring-autowiring"></a>Using Dependency Injection and Spring Autowiring

The only difference between using the router in a standard application and a Spring application is that, in Spring, you can use dependency injection in components annotated with `@Route`. These components are instantiated by Spring and become Spring-initialized beans. In particular, this means you can autowire other Spring-managed beans.

This example is using autowiring in a component annotated with `@Route`:

```java
@Route("")
public class RootComponent extends Div {

    public RootComponent(@Autowired DataBean dataBean) {
        setText(dataBean.getMessage());
    }
}

public interface DataBean {
    String getMessage();
}

@Component
public class DataBeanImpl implements DataBean {

    public String getMessage(){
        return "message";
    }
}
```

## <a id="routing-in-spring-boot-war-applications"></a>Routing in Spring Boot & WAR Applications

Running an application as a Spring Boot application is different from running it as a `WAR` application deployed to a web server.

In `WAR` applications, all `@Route` annotations are discovered automatically, due to the Servlet 3.0 specification. With Spring Boot applications, this is, by design, not the case. See [Spring Boot #321](https://github.com/spring-projects/spring-boot/issues/321) for more.

The [Vaadin Spring add-on](https://vaadin.com/directory/component/vaadin-spring/overview) implements scanning for router classes in Spring Boot applications. This is also true for other Vaadin types that need to be discovered and registered at start-up. However, scanning only occurs inside the Spring Boot application class package, that is, the package in which the `@SpringBootApplication` class is in. If your application contains route classes in packages that aren’t scanned by default, you have two options:

- Move them to the package (or sub-package) in which the `@SpringBootApplication` application class is in, or

- Explicitly specify the packages that should be scanned. You can specify packages to scan using the `value` parameter in the `@EnableVaadin` annotation.

> **Note:** The `@EnableVaadin` annotation is required when using [Spring MVC](https://vaadin.com/docs/next/flow/integrations/spring/spring-mvc.md) without [Spring Boot](https://vaadin.com/docs/next/flow/integrations/spring/spring-boot.md). When using Spring Boot, auto-configuration automatically enables Vaadin with a default location to scan for Vaadin routes. You can still use the `@EnableVaadin` annotation in a Spring Boot application specifically for the purpose of replacing the default configuration.

`4E7C7193-B3CD-4551-8919-58297836B694`
