@Conditional注解如何在春天中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
<强>前言:强>
@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
@Conditional的定义:
//此注解可以标注在类和方法上 @Target ({ElementType.TYPE, ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME), @Documented public @interface  Conditional { ,,Class<? extends Condition>[],价值(); }
从代码中可以看的到,需要传入一个类数组,并且需要继承条件接口:
public interface Condition { boolean 才能匹配(ConditionContext var1, AnnotatedTypeMetadata var2); }
条件是个接口,需要实现匹配方法,返回正确则注入bean,错误则不注入。
<强>示例:强>
首先,创建人类:
public class Person { , private 才能;String 名称; private 才能;Integer 年龄; , public 才能;String  getName (), { ,,,return 名称; ,,} , public 才能;void  setName (String 名称),{ ,,,this.name =,名称; ,,} , public 才能;Integer  getAge (), { ,,,return 年龄; ,,} , public 才能;void  setAge (Integer 年龄),{ ,,,this.age =,年龄; ,,} , public 才能;人(名字,String Integer 年龄),{ ,,,this.name =,名称; ,,,this.age =,年龄; ,,} , @Override才能 public 才能;String  toString (), { ,,,return “人{,,+,“name=& # 39;“, +, name +, & # 39; \ & # 39; & # 39;, +,,,,岁=?+,age +, & # 39;} & # 39;; ,,} }
创建BeanConfig类,用于配置两个人实例并注入,一个是比尔盖茨,一个是林纳斯。
@ configuration public class  BeanConfig { , @ bean才能(=name “bill") public 才能;Person  person1 () { ,,,return new 人(“Bill Gates" 62); ,,} , @ bean才能(“linus") public 才能;Person  person2 () { ,,,return new 人(“Linus" 48); ,,} }
接着写一个测试类进行验证这两个Bean是否注入成功。
public class ConditionalTest { , AnnotationConfigApplicationContext 才能;applicationContext =, new 所(BeanConfig.class); , @Test才能 public 才能;void  test1 () { ,,,Map<字符串,Person>, map =, applicationContext.getBeansOfType (Person.class); ,,,System.out.println(地图); ,,} }
运行,输出结果是这样的,两个人实例被注入进容器。
public class WindowsCondition implements Condition { , ,/* * ,,*,@param conditionContext:判断条件能使用的上下文环境 ,,*,@param annotatedTypeMetadata:注解所在位置的注释信息 ,,*,*/@Override才能 public 才能;boolean 匹配(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata), { ,,,//获取奥委会使用的beanFactory ,,,ConfigurableListableBeanFactory beanFactory =, conditionContext.getBeanFactory (); ,,,//获取类加载器 ,,,ClassLoader ClassLoader =, conditionContext.getClassLoader (); ,,,//获取当前环境信息 ,,,Environment Environment =, conditionContext.getEnvironment (); ,,,//获取豆定义的注册类 ,,,BeanDefinitionRegistry registry =, conditionContext.getRegistry (); , ,,,//获得当前系统名 ,,,String property =, environment.getProperty (“os.name"); ,,,//包含窗户则说明是Windows系统,返回现实 ,,,if (property.contains (“Windows")) { ,,,,,return 真实; ,,,} ,,,return 假; ,,} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null