根据我的测试,当Spring Boot自动配置类具有或不具有@Configuration
注释时,我没有发现明显的差异——如果它们在spring.factories
中正确配置,则无论@Configuration
注释如何,都会加载它们。
然而,似乎每个自定义的自动配置示例和演示都使用@Configuration
注释。所有这些例子都使用@Configuration
是有原因的吗(还是只是惯例(?不使用@Configuration
有什么影响吗?
在自动配置类上使用@Configuration
的一些示例:
- https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-自动配置条件注释类条件
- https://www.baeldung.com/spring-boot-custom-auto-configuration#creating-a自定义自动配置
- https://www.baeldung.com/spring-boot-custom-starter#1-自动配置类
- https://www.javadevjournal.com/spring-boot/spring-boot-custom-starter/
- https://billykorando.com/2019/12/30/building-a-custom-spring-boot-starter/
- http://www.masterspringboot.com/getting-started-with-spring-boot/spring-boot-quickstarts/how-to-build-a-custom-spring-boot-starter-in-no-time/
- https://github.com/snicoll/spring-boot-master-auto-configuration/blob/main/hornetq-spring-boot-autoconfigure/src/main/java/hornetq/autoconfigure/HornetQAutoConfiguration.java
是的,应该是。文档指出,自动配置类应该用@Configuration
:进行注释
在引擎盖下,自动配置是用标准的
@Configuration
类实现的。额外的@Conditional
注释用于约束何时应应用自动配置。通常,自动配置类使用@ConditionalOnClass
和@ConditionalOnMissingBean
注释。
如果不使用@Configuration
对它们进行注释,则依赖于Spring Framework的"lite"@Bean模式。这将更改自动配置类的行为。由于实施不符合文件要求,因此不能保证它在未来发挥作用。