Spring注解学习_组件注册3_@Condition
有时我们想要配置类根据运行时条件决定是否注册Bean,此时我们可以用@Conditional注解,这个注解需要传入Condition数组做参数。Condition为接口,我们要定义自己的类去实现它。
我们新建配置类MainConfig2,以运行时操作系统的不同作为不同的Condition来注册bean
@Configuration
public class MainConfig2 {
@Bean("bill")
@Conditional({WindowsCondition.class}) //如果是windows系统,就注册bill
public Person person1(){
return new Person("Bill Gates",62);
}
@Bean("linus")
@Conditional({LinuxCondition.class}) //如果是linux系统,就注册linus
public Person person2(){
return new Person("Linus",50);
}
}
实现Condition接口需要根据实际需求重写matches方法。
WindowsCondition:
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment environment = conditionContext.getEnvironment();
String osName = environment.getProperty("os.name");
return osName != null && osName.contains("windows");
}
}
LinuxCondition
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment environment = conditionContext.getEnvironment();
String osName = environment.getProperty("os.name");
return osName != null && osName.contains("linux");
}
}
测试:
public class IOCTest {
@Test
public void test3(){
ApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);
String[] persons = context.getBeanNamesForType(Person.class);
for (String person : persons) {
System.out.println(person);
}
}
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 708801794@qq.com
文章标题:Spring注解学习_组件注册3_@Condition
文章字数:269
本文作者:梅罢葛
发布时间:2020-03-29, 14:52:02
最后更新:2020-03-29, 18:37:12
原始链接:https://qiurungeng.github.io/2020/03/29/Spring%E6%B3%A8%E8%A7%A3%E5%AD%A6%E4%B9%A0-%E7%BB%84%E4%BB%B6%E6%B3%A8%E5%86%8C-Condition/