springboot_Condition
Posted songfahzun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot_Condition相关的知识,希望对你有一定的参考价值。
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
我们修改下启动参数
-Dfile.encoding=GBK
在运行
到这里就看出效果了
以上是关于springboot_Condition的主要内容,如果未能解决你的问题,请参考以下文章