springBoot按条件装配:Condition
编码格式转换器接口
package com.boot.condition.bootconditionconfig.converter; /**
* 编码格式转换器接口
*/
public interface EncodingConverter {
}
GBK转换器
package com.boot.condition.bootconditionconfig.converter;
public class GBKEncodingConverter implements EncodingConverter {
}
UTF-8转换器
package com.boot.condition.bootconditionconfig.converter;
public class UTF8EncodingConverter implements EncodingConverter {
}
装配配置类
package com.boot.condition.bootconditionconfig.config; import com.boot.condition.bootconditionconfig.condition.GBKCondition;
import com.boot.condition.bootconditionconfig.condition.UTF8Condition;
import com.boot.condition.bootconditionconfig.converter.EncodingConverter;
import com.boot.condition.bootconditionconfig.converter.GBKEncodingConverter;
import com.boot.condition.bootconditionconfig.converter.UTF8EncodingConverter;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional; /**
* 使用按照条件装配的过程:
* 1、@Conditional [value值必须是实现Condition接口的类]
* 2、根据接口中的matches方法的返回结果确定是否装配bean对象到spring容器中
* false 不装配 , true 就会装配到spring容器中
*/
@SpringBootConfiguration
// @Conditional(UTF8Condition.class)
public class EncodingConverterConfig { @Bean
@Conditional(UTF8Condition.class)
public EncodingConverter createUTF8Converter() {
return new UTF8EncodingConverter();
} @Bean
@Conditional(GBKCondition.class)
public EncodingConverter createGBKConverter() {
return new GBKEncodingConverter();
}
}
GBK装配条件类
package com.boot.condition.bootconditionconfig.condition; import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata; 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;
}
}
UTF-8装配条件类
package com.boot.condition.bootconditionconfig.condition; import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata; 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;
}
}
测试类
package com.boot.condition.bootconditionconfig; import com.boot.condition.bootconditionconfig.converter.EncodingConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; import java.util.Map; @SpringBootApplication
public class BootConditionConfigApplication { public static void main(String[] args) {
ConfigurableApplicationContext context =
SpringApplication.run(BootConditionConfigApplication.class, args); Map<String, EncodingConverter> beansOfType = context.getBeansOfType(EncodingConverter.class);
System.out.println(beansOfType);
// 使用获取系统的编码格式的系统变量的key
System.out.println(System.getProperty("file.encoding")); context.close();
}
}
结果分析:
若file.encoding=’gbk’,则只装配GBKEncodingConverter
若file.encoding=’utf-8’,则只装配UTF8EncodingConverter
springBoot按条件装配:Condition的更多相关文章
- Spring Framework 条件装配 之 @Conditional
Spring Framework 条件装配 之 @Conditional 前言 了解SpringBoot的小伙伴对Conditional注解一定不会陌生,在SpringBoot项目中,Conditio ...
- 深入理解SpringBoot之自动装配
SpringBoot的自动装配是拆箱即用的基础,也是微服务化的前提.其实它并不那么神秘,我在这之前已经写过最基本的实现了,大家可以参考这篇文章.这次主要的议题是,来看看它是怎么样实现的,我们透过源代码 ...
- Spring Boot 2 实践记录之 条件装配
实验项目是想要使用多种数据库访问方式,比如 JPA 和 MyBatis. 项目的 Service 层业务逻辑相同,只是具体实现代码不同,自然是一组接口,两组实现类的架构比较合理. 不过这种模式却有一个 ...
- spring的条件装配bean
1 应用程序环境的迁移 问题: 开发软件时,有一个很大的挑战,就是将应用程序从一个环境迁移到另一个环境. 例如,开发环境中很多方式的处理并不适合生产环境,迁移后需要修改,这个过程可能会莫名的出现很多b ...
- SpringBoot的条件注解源码解析
SpringBoot的条件注解源码解析 @ConditionalOnBean.@ConditionalOnMissingBean 启动项目 会在ConfigurationClassBeanDefini ...
- python线程条件变量Condition(31)
对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition. 一.线程条件变 ...
- SpringBoot(14)—注解装配Bean
SpringBoot(14)-注解装配Bean SpringBoot装配Bean方式主要有两种 通过Java配置文件@Bean的方式定义Bean. 通过注解扫描的方式@Component/@Compo ...
- 竞态条件 race condition data race
竞态条件 race condition Race condition - Wikipedia https://en.wikipedia.org/wiki/Race_condition A race c ...
- SpringBoot JPA + 分页 + 单元测试SpringBoot JPA条件查询
application.properties 新增数据库链接必须的参数 spring.jpa.properties.hibernate.hbm2ddl.auto=update 表示会自动更新表结构,所 ...
随机推荐
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- R语言爬虫:CSS方法与XPath方法对比(代码实现)
CSS选择器和XPath方法都是用来定位DOM树的标签,只不过两者的定位表示形式上存在一些差别: CSS 方法提取节点 library("rvest") single_table_ ...
- vuetify.js框架 下拉框数据改变DOM原数据未清除
今天遇到一个奇怪的bug 需求很简单,就是将“引擎能力”下拉框选中的值作为筛选条件传入到“样本类型”下拉框中,默认“样本类型”下拉框显示所有样本类型 看图: 如图所示,功能很简单. 其实还是对vuet ...
- MySQL高级第五章——主从复制
一.复制的基本原理 slave会从master读取binlog(二进制日志文件)进行数据同步 步骤: 详细操作步骤请参见:http://www.cnblogs.com/luckcs/articles/ ...
- P1199 三国游戏
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...
- CC2541工程优化等级的问题
1. 调试工程的时候发现,优化等级稍微调高一级,就容易出问题,只能用None,其他等级会出现数据丢失的现象.
- MyBatis-自定义结果映射规则
1.自定义结果集映射规则 ①查询 <!-- public Employee getEmpById(Integer id); --> <select id="getEmpBy ...
- libevent学习六(Connect listeners )
创建与释放 //backlog需要查询平台说明,在linux2.2以后 backlog就变成了已完成连接但未accept的队列的最大值(原来是处于syn状态的,现在换成sysctl 控制的参数tc ...
- Jmeter做压力测试的心得
什么是性能压测? 也是最近刚刚接触到,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,通常情况,是模拟多个请求同时 请求服务器,也就是在某个时间内,比如说1秒内,调用接口 ...
- git服务器搭建及eclipse使用git
一.搭建git服务器 1.yum install git 2.新建用户linux用户git,管理git服务 useradd git passwd git 3.初始化git仓库 git init --b ...