四、【注解】Spring注解@Conditional
采用注解的方式来注入bean
- 编写config类
/**
* @author zhangjianbing
* time 2020/09/23
* https://www.zhangjianbing.com
*/
@Configuration
public class ConditionConfig {
@Conditional(ConditionMatch1.class)
@Bean
public Goods m1() {
System.out.println("将zhang放入IOC中。。。。");
return new Goods("zhang", 24);
}
@Conditional(ConditionMatch2.class)
@Bean
public Goods m2() {
System.out.println("将jian放入IOC中。。。。");
return new Goods("jian", 25);
}
@Bean
public Goods m3() {
System.out.println("将bing放入IOC中。。。。");
return new Goods("bing", 26);
}
}
- 编写condition类
/**
* @author zhangjianbing
* time 2020/09/23
* https://www.zhangjianbing.com
*/
public class ConditionMatch1 implements Condition {
// conditionContext:判断条件可以使用的上下文环境
// annotatedTypeMetadata:注解的信息
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment environment = conditionContext.getEnvironment();
String property = environment.getProperty("os.name");
if (property.contains("Mac")) {
System.out.println("=====================");
return true;
}
return false;
}
}
可见它实现了condition接口,目的就是在bean注入容器之前进行判断,符合条件的才注入容器。
- 编写测试类
/**
* @author zhangjianbing
* time 2020/09/23
* https://www.zhangjianbing.com
*/
public class Test01 {
public static void main(String[] args) {
// IOC容器创建(容器类似一个Map)
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConditionConfig.class);
System.out.println("IOC容器初始化完成。。。。。");
}
}
- 测试结果:
=====================
将zhang放入IOC中。。。。
将bing放入IOC中。。。。
IOC容器初始化完成。。。。。