學習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("小明"));
}
}
測試結果
正在為學生小明創建學籍,請稍候!
......
小明的學籍創建完成!
...查詢小明學籍信息...