学习Eventbus的相关知识,留存记录,待以后查看。
环境说明:windows7/JDK7/guava-18.0
EventBus简介
Guava是Google的一个核心库,有很多好用的工具,开源在Github上,地址:google/guava。其中对事件处理的模块是EventBus。利用设计模式中的观察者模式,实现对时间的监听、发布和订阅。阅读源码,并参考Wiki和API文档来写一些例子学习。
Guava引用
Maven配置,在pom.xml文件中引入:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
注:guava对JAVA的版本有要求,最低是JDK 1.6,21.0版本之后要求JDK 1.8。
EventBus概述
- 订阅事件:
事件的订阅方法中,只接受一个参数:事件。将需要处理的事件封装成一个对象,在需要对该事件进行处理时再发布。
- 接收并处理事件:
在处理事件的方法上,加 @Subscribe 标签,调用 EventBus 的 register(Object) 方法注册。
- 发布事件:
调用 EventBus 的 post(Object) 发布事件,这是顺序执行事件的处理方法,需要异步处理时,用 AsyncEventBus。
测试
事件对象
事件:为每个学生创建学籍。
public class StudentEvent{
private String name;
public StudentEvent(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
监听事件
有学生则为其创建学籍。两个方法都有 @Subscribe 标签,所以当有该事件发布时,两个方法都会执行。
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class StudentEventListener {
/**
* 事件处理,创建学籍
* @param event
*/
@Subscribe
public void listenStudentEvent(StudentEvent event) {
System.out.println("正在为学生"+event.getName()+"创建学籍,请稍候!");
System.out.println("......");
System.out.println(event.getName()+"的学籍创建完成!");
}
/**
* 查询学籍信息
* @param event
*/
@Subscribe
public void listen_2(StudentEvent event) {
System.out.println("...查询"+ event.getName() +"学籍信息...");
}
}
注册发布
import org.junit.Test;
import com.google.common.eventbus.EventBus;
public class TestRunEventBus {
@Test
public void testEvent() throws Exception {
EventBus eventBus = new EventBus("student");
StudentEventListener listener = new StudentEventListener();
//注册
eventBus.register(listener);
eventBus.post(new StudentEvent("小明"));
}
}
测试结果
正在为学生小明创建学籍,请稍候!
......
小明的学籍创建完成!
...查询小明学籍信息...