Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用。这个专栏将对Spring Boot框架从浅入深,从实战到进阶,不但我们要懂得如何去使用,还要去剖析框架源码,学习其优秀的设计思想。汇总目录链接:【Spring Boot实战与进阶】学习目录
Spring Boot 是根据配置文件中的内容,决定是否创建 bean,以及如何创建 bean 到 Spring 容器中,而 Spring boot 自动化配置的核心控制,就是 @Conditional 注解。
1、新建EncodingConverter接口,以及两个实现类
public interface EncodingConverter {
}
public class GBKEncodingConverter implements EncodingConverter {
}
public class UTF8EncodingConverter implements EncodingConverter {
}
2、GBKCondition类
public class GBKCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if ("gbk".equals(encoding.toLowerCase())) {
return true;
}
return false;
}
}
3、UTF8Condition类
public class UTF8Condition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if ("utf-8".equals(encoding.toLowerCase())) {
return true;
}
return false;
}
}
4、EncodingConverterConfig配置类
@SpringBootConfiguration
public class EncodingConverterConfig {
@Bean
@Conditional(UTF8Condition.class)
public EncodingConverter createUTF8Converter() {
return new UTF8EncodingConverter();
}
@Bean
@Conditional(GBKCondition.class)
public EncodingConverter createGBKConverter() {
return new GBKEncodingConverter();
}
}
5、BootConditionConfigApplication类
@SpringBootApplication
public class BootConditionConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(BootConditionConfigApplication.class, args);
//获取该接口所有实现类的Bean
Map<String, EncodingConverter> beansOfType = context.getBeansOfType(EncodingConverter.class);
System.out.println(beansOfType);
System.out.println(System.getProperty("file.encoding"));
context.close();
}
}
6、控制台输出
{createUTF8Converter=com.boot.condition.bootconditionconfig.converter.UTF8EncodingConverter@263f04ca}
UTF-8