最近在学习春天,抽空会将学习的知识总结下面,本文我们会接触春天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注解。注意注条件解是不会继承的。如果一个父类使用了条件注解,其子类是不会拥有条件的。如果你动手尝试以上的例子,会帮助你获得更好的理解。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。