Routing with Spring
- Defining Routes
- Using Dependency Injection and Spring Autowiring
- Routing in Spring Boot & WAR Applications
Routing works the same way with Spring as it does in plain Vaadin applications. See Routing and Navigation for more.
This content applies to using Vaadin with both Spring Boot and Spring MVC.
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:
@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 for more on using the Router
class.
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
:
@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";
}
}
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 for more.
The Vaadin Spring add-on 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
|
You don’t need to use the @EnableVaadin annotation at all with Spring Boot. This annotation is intended to be used with Spring MVC to enable the Vaadin configuration. In Spring Boot, auto-configuration is available, which makes it work out of the box. The only reason to use @EnableVaadin is to specify the packages to scan with Spring MVC.
|
4E7C7193-B3CD-4551-8919-58297836B694