您的位置:首页 > 编程语言 > Java开发

Spring boot 系统学习 第二章 基于条件的自动配置

2019-06-02 18:19 549 查看

一.自定义条件的自动装配,需要配合@Conditional注解和Condition接口的实现类一起使用。

二.系统已经存在的一些Conditional条件注解,

具体使用如下所示:

1.Condition接口的实现类

public class UTFCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding=System.getProperty("file.encoding");
        if("UTF-8".equals(encoding)) {
            return true;
        }
        return false;
    }

}

public class GBKCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding=System.getProperty("file.encoding");
        if("GBK".equals(encoding)) {
            return true;
        }
        return false;
    }

}
2.使用自定义的condition条件和使用系统存在的condition条件

@SpringBootConfiguration
public class SpringConfiguration {
    @Bean
    @Conditional(GBKCondition.class)
    public Runnable createRunnable0() {
        return ()->{};
    }
    
    @Bean
    @Conditional(UTFCondition.class)
    public Runnable createRunnable1() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnProperty(name="local.port",havingValue="8080",matchIfMissing=true)//根据name属性的值和havingValue的值进行比较,如果相等则加载对应的bean,matchIfMissing不存在对应的属性则创建对应的bean
    public Runnable createRunnable2() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnBean(name="user")//判断对应name名字的bean是否存在,如果存在则创建此createRunnable3的bean,@ConditionalOnMissingBean于此相反
    public Runnable createRunnable3() {
        return ()->{};
    }
    
    @Bean
    @ConditionalOnClass(name="com.example.demo.User2") //判断根据对应name名字对应路径的类是否存在,如果存在则创建此createRunnable4的bean,ConditionalOnMissingClass于此相反
    public Runnable createRunnable4() {
        return ()->{};
    }
}

3.启动spring boot查看对应的类是否存在

   ConfigurableApplicationContext context=SpringApplication.run(DemoApplication.class, args);
   System.out.println(System.getProperty("file.encoding"));
   System.out.println(context.getBeansOfType(Runnable.class));

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: