如果使用@ConditionalOnClass或@ConditionalOnMissingClass作为元注释的一部分来组合自己的组合注释 , 则必须使用name , 因为在这种情况下引用类不会被处理 。理解自动配置bean在底层 , 自动配置是用标准的@Configuration类实现的 。附加的@Conditional注释用于约束何时应用自动配置 。通常 , 自动配置类使用@ConditionalOnClass和@ConditionalOnMissingBean注释 。这确保了自动配置仅在找到相关类且尚未声明自己的@configuration时适用 。
你可以浏览spring-boot-autoconfigure的源代码 , 以查看Spring提供的@Configuration类(参见META-INF/spring.factories 文件) 。
定位候选自动配置Spring Boot检查是否存在META-INF/spring.factories文件在你发布的jar中 。该文件应该在EnableAutoConfiguration为key下列出你的配置类 , 如下例所示:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.pack.bus.autoconfigure.BusAutoConfiguration,com.pack.bus.autoconfigure.BusWebAutoConfiguration
自动配置只能以这种方式加载 。确保它们是在特定的包空间中定义的 , 并且它们永远不是组件扫描的目标 。此外 , 自动配置类不应该允许组件扫描来查找其他组件 。应该使用特定的@Imports 。如果你的配置需要按特定顺序应用 , 你可以使用@AutoConfigureAfter或@AutoConfigureBefore注释 。例如 , 如果你提供了特定于web的配置 , 你的类可能需要应用在WebMvcAutoConfiguration之后 。
可以使用@AutoConfigureOrder 。该注释具有与常规@Order注释相同的语义 , 但为自动配置类提供了专用的顺序 。
与标准的@Configuration类一样 , 自动配置类的应用顺序只影响其bean定义的顺序 。随后创建这些bean的顺序不受影响 , 由每个bean的依赖关系和@DependsOn关系决定 。
条件注释你几乎总是希望在自动配置类中包含一个或多个@Conditional注解 。@ConditionalOnMissingBean注解是一个常见的例子 , 它允许开发人员在对默认值不满足时覆盖自动配置 。
Spring Boot包含很多@Conditional注解 , 你可以在自己的代码中重用这些注解 , 方法是注解@Configuration类或单独的@Bean方法 。这些注释包括:
- Class Conditions
这种机制不适用于@Bean方法 , 因为@Bean方法的返回类型通常是条件的目标:在方法的条件应用之前 , JVM将加载类并可能处理方法引用 , 如果类不存在 , 则这些引用将失败 。
为了处理这种情况 , 可以使用一个单独的@Configuration类来隔离这种情况 , 如下面的例子所示:
@Configuration(proxyBeanMethods = false)// Some conditions ...public class MyAutoConfiguration {// Auto-configured beans ...@Configuration(proxyBeanMethods = false)@ConditionalOnClass(SomeService.class)public static class SomeServiceConfiguration {@Bean@ConditionalOnMissingBeanpublic SomeService someService() {return new SomeService();}}}
如果使用@ConditionalOnClass或@ConditionalOnMissingClass作为元注释的一部分来组合自己的组合注释 , 则必须使用name , 因为在这种情况下引用类不会被处理 。
- Bean Conditions
当放在@Bean方法上时 , 目标类型默认为方法的返回类型 , 如下面的例子所示:
@Configuration(proxyBeanMethods = false)public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic SomeService someService() {return new SomeService();}}
- Property Conditions
推荐阅读
- 台式电脑怎么设置自动关机时间 电脑怎么设置自动关机时间
- 如何取消黄钻自动续费 如何取消黄钻
- 全自动管道过滤器厂家 自动清洗过滤器
- 长安奔奔自动挡油耗;长安奔奔自动挡挂档就熄火怎么回事?
- 智能仓储 自动化仓储设备
- 手自一体跟自动有什么区别吗 手自一体和自动挡的区别在哪里
- 性用品自动售卖机价格 智能机器人伴侣
- 能自动挂机打怪的端游 可以挂机的游戏
- 斑马gk888t打印机无法打印 斑马打印机驱动
- 自动喷漆机 往复式喷漆机