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);
        }
    }
}

image-20200329152331434


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,邮件至 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/
目录
×

喜欢就点赞,疼爱就打赏