Guava EventBus配合Spring完成事件分发可配置(变通使用三方库)
2015-06-17 19:36
381 查看
在项目需要正对一个事件做分发,触发多个处理逻辑Handler,普通的使用Java代码做会造成代码的高耦合,如果后期涉及到处理添加、修改、去除Handler都会涉及到整体代码变更增加测试复杂度。
本文将列举一种通过Guava 的EventBus实现事件和Handler的注册机制,并结合Spring使得整个Handler挂载卸载配置化。
包装原生的Guava Handler ,继承EventBus InitializingBean 并在继承方式afterPropertiesSet中注册Handler到EventBus中
定义Handler的抽象接口类
定义处理事件Entity
实现Handler 类
最后使用Spring配置文件,将Handler注册到EventBus中
最终Demo使用
本文将列举一种通过Guava 的EventBus实现事件和Handler的注册机制,并结合Spring使得整个Handler挂载卸载配置化。
包装原生的Guava Handler ,继承EventBus InitializingBean 并在继承方式afterPropertiesSet中注册Handler到EventBus中
com.qyou.EventBusAdapter /** * EventBus适配器 * Created by xueping.you on 15-5-5. */ public class EventBusAdapter extends EventBus implements InitializingBean { private List<EventAbstract> eventBusListener; public void setEventBusListener(List<EventAbstract> eventBusListener) { this.eventBusListener = eventBusListener; } @Override public void afterPropertiesSet() throws Exception { for(EventAbstract eventAbstract : eventBusListener){ this.register(eventAbstract); } } }
定义Handler的抽象接口类
/** * Event 事件处理抽象接口类 * Created by xueping.you on 15-5-5. */ public interface EventAbstract<E> { /** event Handler处理接口 **/ void handle(E event); }
定义处理事件Entity
public class TestEvent001{ //...code } public class TestEvent002{ //...code }
实现Handler 类
Handler1:com.qyou.SendFailMailHandler public class SendFailMailHandler implements EventAbstract<TestEvent001> { @Subscribe //EventBus 标签 @Override public void handle(TestEvent001 event) { //...处理代码 } } Handler2:com.qyou.SendSuccessSMSHandler public class SendSuccessSMSHandler implements EventAbstract<TestEvent002> { @Subscribe //EventBus 标签 @Override public void handle(TestEvent002 event) { //...处理代码 } }
最后使用Spring配置文件,将Handler注册到EventBus中
<!-- EventBusListener 定义 --> <util:list id="eventBusListener" value-type="com.qyou.EventAbstract"> <bean class="com.qyou.SendFailMailHandler "/> <bean class="com.qyou.SendSuccessSMSHandler "/> </util:list> <!-- EventBusAdapter适配器 --> <bean id="eventBusAdapter" class="com.qyou..EventBusAdapter"> <property name="eventBusListener" ref="eventBusListener"/> </bean>
最终Demo使用
TestEvent001 event = .... eventBusAdapter.post(event);
相关文章推荐
- JavaWeb_Servlet开发
- Java习惯用法总结
- Spring2.5 访问 Session 属性的四种策略
- 深入理解JavaIO流
- Spring MVC中Session的正确用法之我见(转)
- Struts 页面返回空白原因
- java8新特性 (λ、stream 与 默认接口方法)
- Understanding Spring MVC Model and Session Attributes
- SpringMVC AOP 里面在invoke方法里面获取request参数
- 关于eclipse里可以连接sqlserver2008,在浏览器里却连接不了问题
- day06 Java面向对象
- Eclipse中使用SVN
- Struts2他们拦截器实例定义—登陆权限验证
- day06 Java基础
- 分解和合并:Java 也擅长轻松的并行编程! 作者:Julien Ponge
- Akka学习笔记-简介与API简单操作
- java Socket使用详细解释
- Java并发编程-20-在执行器中取消任务和控制任务的完成
- Hadoop伪分布模式安装以及在Eclipse中运行第一个MapReduce项目
- Struts2(二)局部与全局类型转换器