码迷,mamicode.com
首页 > 编程语言 > 详细

springboot_Condition

时间:2018-06-29 12:07:15      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:null   context   .class   tco   config   enc   ide   初始   new   

Condition可以根据不同的条件装配不同的bean
例如:根据不同的字符集加载不同的bean
举个栗子
我有一个接口,两个实现类
public interface EncodingConvert {
}
public class UTF8EncodingConvert implements EncodingConvert {
}
public class GBKEncodingConvert  implements EncodingConvert{
}

以及两个Condition

public class UTF8Condition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if (encoding != null) {
            return "utf-8".equals(encoding.toLowerCase());
        }
        return false;
    }
}
public class GBKCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if (encoding != null) {
            return "gbk".equals(encoding.toLowerCase());
        }
        return false;
    }
}

以及一个配置类使用@Conditional,以UTF8Condition.class作为参数,这个UTF8Condition的matches方法

返回值true和false,直接决定了是否初始化这个bean

 

@SpringBootConfiguration
public class EncodingConvertConfig {


    @Bean
    @Conditional(UTF8Condition.class)
    public EncodingConvert getUTF8EncodingConvert() {
        UTF8EncodingConvert utf8EncodingConvert = new UTF8EncodingConvert();
        return utf8EncodingConvert;
    }

    @Bean
    @Conditional(GBKCondition.class)
    public EncodingConvert getGBKEncodingConvert() {
        GBKEncodingConvert gbkEncodingConvert = new GBKEncodingConvert();
        return gbkEncodingConvert;
    }
}

 

 

然后获取数据

@SpringBootApplication
public class Springboot4Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Springboot4Application.class, args);
        Map<String, EncodingConvert> beansOfType = context.getBeansOfType(EncodingConvert.class);
        System.out.println("beansOfType = " + beansOfType);
    }
}

根据结果看到加载的是utf8

{getUTF8EncodingConvert=com.fz.song.UTF8EncodingConvert@18f8cd79}

 

我们修改下启动参数

-Dfile.encoding=GBK

在运行

{getGBKEncodingConvert=com.fz.song.GBKEncodingConvert@6c345c5f}

到这里就看出效果了

 

springboot_Condition

标签:null   context   .class   tco   config   enc   ide   初始   new   

原文地址:https://www.cnblogs.com/songfahzun/p/9242588.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!