Spring 4.0新功能:@Conditional注解详细介绍

  

  

最近在学习春天,抽空会将学习的知识总结下面,本文我们会接触春天4的新功能:@Conditional注解。在之前的春季版本中,你处理条件只有以下两个方法:

  
      <李>在3.1版本之前,你需要使用弹簧表达式语言李   <李>在3.1版本发布时,配置文件被引入来处理条件。   
  

让我们分别看看以上两者,在来理解春天4带来的@Conditional注解。

  


  

  

?的三元标识符(if - then - else)可以在春天配置文件中用来表达条件语句。

        & lt; bean id=肮臁北?   & lt; constructor-arg值=" https://www.yisu.com/zixun/# {systemProperties [' system.propery.flag '] & # 63;:假}"/比;   & lt;/bean>   & lt; bean id=癰ean”比;   & lt;属性名=安撇眝alue=" https://www.yisu.com/zixun/#{国旗吗?“是的”:“不”}"/比;   & lt;/bean>      

这个bean的属性依赖于标志的值,该值是使用外部属性注入的,这样bean就具有了动态的能力。

  


  

  

这是在spring 3.1引入的。像下面这样使用。

        & lt; !——默认配置将加载如果没有指定配置文件——比;   & lt; !——这will>   & lt;进口资源="类路径:违约。xml”/比;   & lt;/beans>   & lt; !——其他配置文件比;   & lt; bean配置文件=皁therProfile”比;   & lt;进口资源="类路径:另一个概要文件。xml”/比;   & lt;/beans>      


  

  

现在介绍@Conditional注解。官方文档的说明是“只有当所有指定的条件都满足是,组件才可以注册”。主要的用处是在创建bean时增加一系列限制条件。

  

条件接口的声明如下:

        @Retention (RetentionPolicy.RUNTIME)   @Target(应用。类型,ElementType.METHOD)   @ interface公共条件{   类& lt; ! & # 63;扩展条件——在[]值();   }      

所以@Conditional注解使用方法如下

  
      <李>类型级别,可以在@ component或是@ configuration类上使用李   <李>原型级别,可以用在其他自定义的注解上李   <李>方法级别,可以用在@ bean的方法上李   
  

如果一个@ configuration类使用了@Conditional,会影响所有@ bean方法和@ import关联类

        公共接口条件{/* *判断条件匹配。   * @param上下文状态上下文   * @param元数据的元数据{@link AnnotationMetadata类}   *}{@link方法方法检查。   * @return {@code真的}如果条件匹配和组件可以注册   *或{@code假}否决登记。   */布尔匹配(ConditionContext上下文,AnnotatedTypeMedata元数据);   }      

下面是一个例子

        公共类SystemPropertyCondition实现条件{   @Override   公共布尔匹配(ConditionContext上下文,AnnotatedTypeMetadata元数据){   返回(System.getProperty(“国旗”)!=null);   }   }      {类SystemPropertyAbsentCondition实现条件   @Override   公共布尔匹配(ConditionContext上下文,AnnotatedTypeMetadata元数据){   返回(System.getProperty(“国旗”)==null);   }   }      

这里我们有两个类:SystemPropertyCondition和SystemPropertyAbsentCondtion。这两个类都实现了条件接口。覆盖的方法基于属性国旗返回一个布尔值。
  

  

现在我们定义两个类,一个是积极的条件,一个是负的条件:

        @ bean   @Conditional (SystemPropertyCondition.class)   公共SampleService service1 () {   返回新SampleServiceImpl1 ();   }      @ bean   @Conditional (SystemPropertyAbsentCondition.class)   生成公共SampleService service2 () {   返回新SampleServiceImpl2 ();   }      

上面提到的配置文件已经通过条件原型注解进行了修改。

  

  

本文介绍了春天4的conditianal注解。注意注条件解是不会继承的。如果一个父类使用了条件注解,其子类是不会拥有条件的。如果你动手尝试以上的例子,会帮助你获得更好的理解。

  

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

Spring 4.0新功能:@Conditional注解详细介绍