我遇到Spring Boot配置问题。
创建了基本的Spring Boot项目我遇到问题,配置仅适用于子目录中的类:
我已经尝试过注释 @ComponentScan ,但它没有帮助。
你知道我该怎么办?
答案 0 :(得分:47)
Spring Boot documentation for @SpringBootApplication
州
许多Spring Boot开发人员总是对其主类进行注释 使用
@Configuration
,@EnableAutoConfiguration
和@ComponentScan
。 由于这些注释经常被一起使用(特别是如果 你遵循上面的最佳实践),Spring Boot提供了一个 方便的@SpringBootApplication
替代方案。
@SpringBootApplication
注释等同于使用@Configuration
,@EnableAutoConfiguration
和@ComponentScan
与他们合作 默认属性:[...]
@ComponentScan
javadoc状态
如果未定义特定包,则会从中进行扫描 声明此批注的类的包。
也就是说,只扫描与ReadingListApplication
位于同一个包中的类型。
如果您需要自定义配置,请根据需要提供自己的@Configuration
,@EnableAutoConfiguration
和@ComponentScan
。
答案 1 :(得分:13)
设置Spring boot
项目时,请准备一个Application类(在基础包中包含@SpringBootApplication
注释的类。
@SpringBootApplication
所做的一件事是组件扫描。但是,它只扫描子包。即如果你将该类放在 com.mypackage 中,那么它将扫描子包中的所有类,即com.mypackage。*。
如果您不想这样做,您还可以将@ComponentScan
添加到指定根包的类中,即@ComponentScan("com.mypackage")
我建议你有一个基本软件包,即 com.mypackage 。在这些包中,有你的子包。您是否在该基础包中包含@SpringBootApplication
。
答案 2 :(得分:7)
检查Spring文档:
您可以使用@SpringBootApplication覆盖组件扫描的默认值。您只需将其作为参数包含在内:
@SpringBootApplication(scanBasePackages = "entertainment")
或String数组:
@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})
答案 3 :(得分:1)
我遇到了同样的问题,为了解决这个问题,我重命名了这样的软件包。
“com.project”
你可以放置你的SpringBootAplication主类,然后创建以“com.project”开头的其他包
“com.project.dao”
“com.project.controller”
创建这个子项目结构你不需要在@SpringBootApplication注释中使用scanBasePackages,这样你的主类就能找到你项目中的每个组件。
如果您选择使用scanBasePackages,请记住您需要像这样设置所有组件包。
@SpringBootApplication(scanBasePackages = {“com.project.dao”, “com.project.controller”})
答案 4 :(得分:0)
要使包裹扫描真正生效,您必须执行以下操作。
@SpringBootApplication(scanBasePackages = {"com.your.package.test.*.*"})
第一个星号告诉您扫描主路径( com.your.package.test )中的所有软件包,第二个星号告诉您扫描每个软件包中的所有文件。
例如:
com.your.package.test
|_ config
|_ business
|_ controller
|_ domain
|_ repository