您的位置:首页 > 编程语言 > Java开发

Guava EventBus配合Spring完成事件分发可配置(变通使用三方库)

2015-06-17 19:36 381 查看
在项目需要正对一个事件做分发,触发多个处理逻辑Handler,普通的使用Java代码做会造成代码的高耦合,如果后期涉及到处理添加、修改、去除Handler都会涉及到整体代码变更增加测试复杂度。

本文将列举一种通过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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: