Vaadin Flow如何配置将视图放在Spring Boot主类所在包外的其他包
Vaadin Flow跨包存放视图解决方案
Vaadin Flow完全支持将视图放在Spring Boot主类所在包的非子包路径下,你之前配置Spring的scanBasePackages不生效是因为Vaadin有独立的注解扫描逻辑,不会复用Spring的组件扫描范围。
具体解决步骤
- 第一步:在Spring Boot启动类上添加
@EnableVaadin注解,指定Vaadin需要扫描的包路径,示例代码如下:
import com.vaadin.flow.spring.annotation.EnableVaadin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "com.xyz.vaadin") // 可直接填写顶层包名统一扫描,也可单独指定views、config等子包 @EnableVaadin("com.xyz.vaadin") public class VaadinAppApplication { public static void main(String[] args) { SpringApplication.run(VaadinAppApplication.class, args); } }
- 第二步(可选,Vaadin 23+版本适用):也可以通过配置文件指定扫描范围,在
application.properties或application.yml中添加如下配置即可:
vaadin.allowed-packages=com.xyz.vaadin
- 第三步:确认你的视图类已经正确添加
@Route注解,不存在路由路径重复、类未实现Vaadin组件等低级错误。
原理说明
Vaadin默认仅扫描Spring Boot主类所在包及其子包下的@Route、@NpmPackage、@CssImport等Vaadin专属注解,和Spring的组件扫描是完全独立的两套逻辑,因此仅配置Spring的包扫描规则无法让Vaadin识别到其他包下的路由类。
内容的提问来源于stack exchange,提问作者megloff
相关产品推荐
相关产品推荐

