使用注释@SpringBootApplication进行配置

zaq*_*otr 24 java spring gradle spring-boot

我有Spring Boot配置的问题.

我使用https://start.spring.io/创建了基本的Spring Boot项目

我有一个问题,配置仅适用于子目录中的类:

在此输入图像描述

我试过注释@ComponentScan但它没有帮助.

你知道我能用这个做什么吗?

Sot*_*lis 54

春季启动文档@SpringBootApplication状态

许多春季引导开发者总是有其主类注解为@Configuration,@EnableAutoConfiguration@ComponentScan.由于这些注释经常一起使用(特别是如果您遵循上面的最佳实践),Spring Boot提供了一个方便的@SpringBootApplication替代方案.

@SpringBootApplication注解相当于使用 @Configuration,@EnableAutoConfiguration@ComponentScan与他们的默认属性:[...]

其中@ComponentScan的javadoc状态

如果未定义特定包,则将从声明此批注的类的包进行扫描.

也就是说,只ReadingListApplication扫描与您相同的包中的类型.

如果你想有一个自定义配置,提供自己的@Configuration,@EnableAutoConfiguration@ComponentScan适当.

  • 如果我添加了另一个 spring boot 应用程序作为 mvn 依赖项,然后我想让我的父应用程序扫描这个库呢? (3认同)
  • 只是想补充一点,您可能需要注意 @SpringBootApplication 如何配置每个注释,因为它很重要。例如,`@ComponentScan`不仅是这样,而且实际上是`@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM,classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM,classes = AutoConfigurationExcludeFilter) .class) }) ` 对于 SpringBoot 2.XX 所以请注意,如果您用自己的个人配置替换 @SpringBootApplication (2认同)

小智 15

在设置Spring boot项目时,请使用Application类(包含@SpringBootApplication基础包中的注释的类).

其中一件事@SpringBootApplication是组件扫描.但是,它只扫描子包.即如果你将该类放在com.mypackage中,那么它将扫描子包中的所有类,即com.mypackage.*.

如果你不想这样做,你也可以添加一个@ComponentScan指定根包的类,即@ComponentScan("com.mypackage")

我建议你有一个基本包,即com.mypackage.在这些包中,有你的子包.您是否包含该@SpringBootApplication基础包中的类.


alv*_*lla 12

检查Spring文档:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html

您可以使用@SpringBootApplication覆盖组件扫描的默认值.您只需将其作为参数包含在内:

@SpringBootApplication(scanBasePackages = "entertainment")

或字符串数​​组:

@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})


小智 6

我遇到了同样的问题,为了解决它,我像这样重命名了我的包。

“com.project”

在那里你可以放置你的 SpringBootAplication 主类,然后只需创建以“com.project”开头的其他包

“com.project.dao”

“com.project.controller”

创建此子项目结构时,您无需在 @SpringBootApplication 注释中使用 scanBasePackages,这样做您的主类将能够找到项目中的每个组件。

如果您选择使用 scanBasePackages,请记住您需要像这样设置所有组件包

@SpringBootApplication(scanBasePackages = {"com.project.dao", "com.project.controller"})