JFinal-event v2.3.0 發佈,簡化 Event 事件類

說明

JFinal-event 2.x 參考 Spring 4.2.xEvent 的使用方式而生,爲 JFinal 用戶帶來更多方便。其核心目標是深層次解耦,爲您節約更多時間,去陪戀人、家人和朋友 :)vue

年初 @idoz 提議實現相似 Spring 4.2 裏的 PayloadApplicationEvent,其實我早就有此想法,一直沒有抽出時間來折騰。java

順便在 碼雲上添加了 issues 3.0優化,有2點功能:git

第一點,實現 PayloadApplicationEvent 不難。擴展個 EventType

class1 爲 ApplicationEvent 類 或者 PayloadApplicationEvent類信息 class2 爲 ApplicationEvent 泛型,或者 Payload 中的類信息數組

第二點,將類掃描改成 annotation Processor 編譯期處理(避免容器環境差別)

因爲 @EventListener 註解能夠在任何方法中,annotation Processor 須要掃描 *,而後 找出 對應的含有 @EventListener 方法的類,而後寫入 META-INF/dream.events 文件中。架構

本次版本升級完成了第一點,第二點因爲以爲更加適合底層框架去實現,從而方便擴展,對於 annotation Processor 感興趣的朋友能夠了解個人開源 mica-autoapp

更新說明

2019-04-08 v2.3.0

  • 升級到 jfinal 3.8。
  • 支持 @EventListener 方法能夠無參數。
  • ObjenesisBeanFactory 和 jfinal Aop inject 衝突,去掉對 JFinal inject 支持,標記爲棄用。
  • 新增 SourceClass 做爲 event 事件源(同 Spring PayloadApplicationEvent),event模型再也不須要實現 ApplicationEvent
  • @EventListener 註解新增 value 變量,功能同 events。
  • 修復 @EventListener events 參數類型判斷bug。

初始化插件

// 初始化插件
EventPlugin plugin = new EventPlugin();
// 設置爲異步,默認同步,或者使用`threadPool(ExecutorService executorService)`自定義線程池。
plugin.async();

// 設置掃描jar包,默認不掃描
plugin.scanJar();
// 設置監聽器默認包,多個包名使用;分割,默認全掃描
plugin.scanPackage("net.dreamlu");
// bean工廠,默認爲DefaultBeanFactory,可實現IBeanFactory自定義擴展
// 對於將@EventListener寫在不含無參構造器的類須要使用`ObjenesisBeanFactory`(2.3.0 已經不推薦使用)
plugin.beanFactory(new ObjenesisBeanFactory());

// 手動啓動插件,用於main方法啓動,jfinal中不須要,添加插件便可。
plugin.start();

// 中止插件,用於main方法測試
plugin.stop();
複製代碼

新建事件類(任意模型便可 2.3.0支持)

public class AccountEvent {

	private Integer id;
	private String name;
	private Integer age;

	// 省略 get set

}
複製代碼

編寫監聽

@EventListener
public void listenTest1Event(AccountEvent event) {
    System.out.println("AccountEvent:" + event);
}
複製代碼

發送事件

AccountEvent event = new AccountEvent();
event.setId(1);
event.setName("張三");
event.setAge(18);

EventKit.post(event);
複製代碼

@EventListener註解說明

示例

@EventListener(events = Test1Event.class, order = 1, async = true, condition = "event.isExec()")
複製代碼

說明

  • valueevents支持的事件類型數組,用於將事件方法定義爲ApplicationEvent或者自定義父類。
public class Test {

    // Test1Event, Test2Event 爲 TestEvent 子類
    @EventListener({Test1Event.class, Test2Event.class})
    public void applicationEvent(TestEvent event) {
        System.out.println(Thread.currentThread().getName() + "\tevent:" + event);
    }
}
複製代碼
  • order排序,數值越小越先執行,默認爲Integer.MAX_VALUE
  • async異步執行,須要插件開啓async()或者自定義線程池。
  • condition表達式條件,使用event.xxxx,event.isExec() == true斷定event的屬性或者方法。

jar依賴

jar包下載 central.maven.org/maven2/net/…框架

以上版本均已上傳到maven倉庫~異步

<dependency>
    <groupId>net.dreamlu</groupId>
    <artifactId>JFinal-event</artifactId>
    <version>2.3.0</version>
</dependency>
複製代碼

開源推薦

關注咱們

如夢技術-公衆號.jpg

掃描上面二維碼,更多精彩內容天天推薦!async

相關文章
相關標籤/搜索