springboot自动装配(3)---条件注解@Conditional

之前有说到springboot自动装配的时候,都是去寻找一个XXXAutoConfiguration的配置类,然而我们的springboot的spring.factories文件中有各种组件的自动装配类,到底哪些应该生效,哪些又不生效呢?这个时候就要用到spring提供的条件注解了。

比如:

@ConditionalOnJava                               系统的java版本是否符合要求

@ConditionalOnBean                              容器中存在指定Bean

@ConditionalOnMissingBean                  容器中不存在指定Bean
@ConditionalOnExpression                     满足SpEL表达式指定
@ConditionalOnClass                             系统中有指定的类
@ConditionalOnMissingClass                 系统中没有指定的类
@ConditionalOnProperty                        系统中指定的属性是否有指定的值
@ConditionalOnResource                      类路径下是否存在指定资源文件
@ConditionalOnWebApplication            当前是web环境
@ConditionalOnNotWebApplication       当前不是web环境
等等,
当条件成立时,才会装配此配置
比如 RabbitAutoConfiguration
 

 当有RabbitTemplate, Channel的时候才会加载这个配置,当没有ConnectionFactory连接工厂的时候才生成工厂配置。

我们如何查看哪些自动生效了,哪些没有生效呢,这个时候可以配置一个参数 debug=true ,这个时候启动springboot程序会在启动日志打印匹配上的和没有匹配上的配置

Positive matches: 匹配上的

Negative matches:没有匹配上的

 
原文地址:https://www.cnblogs.com/nijunyang/p/12051770.html