借助@Conditional实现自定义初始化Spring Bean
来源:互联网 发布:淘宝客服绩效考核工具 编辑:程序博客网 时间:2024/05/20 23:30
本项目使用传统的Spring MVC框架进行搭建,未使用Spring Boot,而需要实现根据用户配置自动选择TCP、UDP、串口等不同协议进行数据获取,还有用户若在内网,实现短信服务动态关闭(wsimport 方式实现的,用户配置修改后Spring不加载相应的短信服务)。若使用Spring Boot,Spring Boot提供了一系列根据条件初始化Spring Bean的注解,非常方便的进行此等操作,在传统Spring MVC项目中,可自己借助@Conditional实现以上操作。
协议动态选择
首先定义不同协议的注解
/*** @类名 ServerType* @描述 不同协议初始化不同服务器(0:TCP,1:UDP,2:串口)* @作者 zhuxl* @创建时间 2017-3-28下午04:50:55*/public class ServerType {/** * @类名 TCP * @描述 TCP * @作者 zhuxl * @创建时间 2017-3-28下午04:55:38 */public @interface TCP {}/** * @类名 UDP * @描述 UDP * @作者 zhuxl * @创建时间 2017-3-28下午04:55:43 */public @interface UDP {}/** * @类名 Serial * @描述 串口 * @作者 zhuxl * @创建时间 2017-3-28下午04:55:48 */public @interface Serial {}}
根据配置文件中不同的配置,实现对不同协议的处理
/** * @类名 ServerCondition * @描述 服务器条件初始化(根据配置自动初始化不同的服务器) * @作者 zhuxl * @创建时间 2017-4-1下午01:30:48 */public class ServerCondition implements Condition{ @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { int type=PropUtil.getInt(Constant.SETTING_PATH, "transport.type", 0); switch(type){ case 1:{//UDP return metadata.isAnnotated(UDP.class.getName()); } case 2:{//串口 return metadata.isAnnotated(Serial.class.getName()); } default:{//TCP return metadata.isAnnotated(TCP.class.getName()); } } }}
- 对于不同的协议类型,初始化不同的Bean
//串口处理@Component("minaServer")@Conditional(value=ServerCondition.class)@Serialpublic class SerialServer implements Server {}// TCP处理@Component("minaServer")@Conditional(value=ServerCondition.class)@TCPpublic class TCPServer implements Server {}
短信服务动态关闭:根据配置,能够实现短信服务动态加载(短信服务时wsimport加载的)
- 短信服务条件初始化
/*** @类名 SmsCondition* @描述 短信服务条件初始化* @作者 zhuxl* @创建时间 2017-6-12下午04:58:58*/public class SmsCondition implements Condition{ @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { int flag=PropUtil.getInt(Constant.SETTING_PATH, "sms.use", 0); return flag==1?true:false; }}
- 短信服务条件初始化
- 短信服务Bean动态加载
/** * @类名 SmsConfig * @描述 短信条件初始化 * @作者 zhuxl * @创建时间 2017-6-12下午05:13:14 */@Configuration@Conditional(SmsCondition.class)public class SmsConfig { @Bean public SmSWebService smSWebService(){ return new SmSWebService(); } @Bean public SmSWebServiceSoap smSWebServiceSoap(SmSWebService smSWebService){ return smSWebService.getSmSWebServiceSoap(); }}
- 在需要短信的地方使用以下代码加入短信服务,但使用前需要判断短信服务是否为空,为空则为加载。
@Autowired(required=false) @Qualifier("smSWebServiceSoap") private SmSWebServiceSoap smSWebServiceSoap; public String sendSms(Sms sms) { if(smSWebServiceSoap==null){ return "短信功能不可用,请确定短信服务可用"; } if(sms==null){ return "短信参数错误"; } try{ WsSendResponse response=smSWebServiceSoap.sendSms(smsAccount.getUserId(), smsAccount.getAccount(), smsAccount.getPassword(), sms.getMobile(), sms.getContent(), sms.getSendTime(), sms.getExtno()); logger.info("短信发送:"+response.getMessage()+","+response.getReturnStatus()); return response.getMessage(); }catch(Exception ex){ ex.printStackTrace(); return "短信发送失败"; } }
阅读全文
0 0
- 借助@Conditional实现自定义初始化Spring Bean
- Spring 条件化Bean @Conditional
- 使用FactoryBean接口实现自定义bean初始化
- 使用FactoryBean接口实现自定义bean初始化
- Java代码实现Spring bean的初始化
- 随spring context初始化完成后init自定义bean
- spring 自定义bean初始化及析构方法
- spring详解:通过FactoryBean自定义工厂初始化Bean
- spring之 自定义Bean初始化和析构
- Spring管理bean的原理自定义实现
- Spring Bean 初始化过程
- Spring - 初始化bean
- Spring Bean 初始化过程
- Spring Bean 初始化过程
- spring bean 初始化
- spring手动初始化bean
- spring初始化bean InitializingBean
- Spring Bean 初始化过程
- ionic2生命周期(通俗基础入门弱鸡版)
- TCP/IP、Http、Socket、XMPP-从入门到深入
- 给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来。对于每个写下来的数,只保留最高位的那个数码。求1~9每个数码出现的次数。
- 【转】Linux下的cat指令
- WEBRTC 候选地址收集
- 借助@Conditional实现自定义初始化Spring Bean
- Java接口和抽象类的详解
- Android apk 瘦身 去掉不需要的so
- Android学习路之开关按钮ToggleButton和开关Switch
- API设计的基本要求
- 统计数组 arr 中值等于 item 的元素出现的次数
- 建立个人博客-进阶
- OBJECTIVE-C编程(第2版)学习笔记1
- 硬盘概述