弹簧引导@Condition注解,组合条件你知道吗

  

上一篇文章你应该知道的@ConfigurationProperties注解的使用姿势,这一篇就够了介绍了如何通过<代码> @ConfigurationProperties 注解灵活读取配置属性,这篇文章将介绍如何灵活配置Spring Bean

  

写在前面

  

当我们构建一个弹簧应用的时候,有时我们想在满足指定条件的时候才将某个豆加载到应用上下文中,在Spring 4.0时代,我们可以通过<代码> @Conditional 注解来实现这类操作
弹簧引导@Condition注解,组合条件你知道吗

  

我们看到<代码> @Conditional 注解接收的参数是扩展条件接口的泛型类,也就是说,我们要使用<代码> @Conditional 注解,只需要实现条件接口并重写其方法即可:
弹簧引导@Condition注解,组合条件你知道吗

  

看到接口的匹配方法返回的是布尔类型,是不是和我们自定义验证注释有些类似,都是用来判断是否满足指定条件。另外注意看,以上注解和接口都在<代码> org.springframework.context。注释>   

终于到春天了启动时代,在这个全新的时代,弹簧引导在<代码> @Conditional 注解的基础上进行了细化,无需出示复杂的介绍信(实现条件接口),只需要手持预定义好的<代码> @ConditionalOnXxxx 注解印章的门票,如果验证通过,就会走进应用程序上下文大厅

  

注解详解

  

春季启动对<代码> @Conditional 注解为我们做了细化,这些注解都定义在<代码> org.springframework.boot.autoconfigure。条件> 弹簧引导@Condition注解,组合条件你知道吗

  

逐个打开这13个注解,我们发现这些注解上有相同的元注解:
弹簧引导@Condition注解,组合条件你知道吗

  

从这些标记上我们可以了解如下内容:

  
      <李>   

    都可以应用在类型上,也就是说,春自动扫描的一切类(@ @ configuration, @ component, @ service,或@ controller)都可以通过添加相应的<代码> @ConditionalOnXxxx>   李   <李>   

    都可以应用在方法上,所以有@ bean标记的方法也可以应用这些注解

      李   <李>都是用了<代码> @Conditional 注解来标记,OnBeanCondition等自定义条件还是实现了条件接口的,换汤不换的药,没什么神秘的,只不过做了更具象的封装罢了,来看类依赖图:李   
  

弹簧引导@Condition注解,组合条件你知道吗

  

其实看这些注解字面意思已经能理解这些注解的含义,但是我们还是要说明具体的使用以及一些注意事项,我按照个人使用频次由高到低讲解:

  

@ConditionalOnProperty

  

毫无疑问这个注解是榜首
弹簧引导@Condition注解,组合条件你知道吗

  

这个条件解释是:应用程序。属性或应用程序。yml文件中mybean。使为真实才会加载MyCondition这个Bean,如果没有匹配上也会加载,因为matchIfMissing=true,默认值是错误的。
春天引导@Condition注解,组合条件你知道吗

  

@ConditionalOnBean和ConditionalOnMissingBean

  

有时候我们需要某个豆已经存在应用上下文时才会加载,那么我们会用到<代码> @ConditionalOnBean 注解:
弹簧引导@Condition注解,组合条件你知道吗

  

与之相反,有时候我们需要某个Bean不存在于应用上下文时才会加载,那么我们会用到<代码> @ConditionalOnMissingBean 注解

  

@ConditionalOnClass和@ConditionalOnMissingClass

  

不要嫌我废话,和上面的一样,只不过判断某个类是否存在于类路径中,这就不做过多说明了

  

@ConditionalOnExpression

  

如果我们有更复杂的多个配置属性一起判断,那么我们就可以用这个表达式了:
弹簧引导@Condition注解,组合条件你知道吗

弹簧引导@Condition注解,组合条件你知道吗