歡迎您光臨本站 註冊首頁

JFinal-event 3.0.0 發布,插件啟動速度提升十倍

←手機掃碼閱讀     admin @ 2019-07-20 , reply:0

前言

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

距 gitee issues #IR96V 6個月,終於把【3.0優化】有生之年閑下來了弄吧的第二點優化進行了完善,鼓掌!!!

更新記錄

2019-07-19 v3.0.0

  • 升級到jfinal 4.3。

  • 完成【3.0優化 有生之年閑下來了弄吧】#IR96V 之2 將類掃描,改到編譯期。

  • 刪除 ClassUtil,但願大夥沒用這個類。

更新說明

此次更新主要是採用 Annotation Processor 技術,將運行期的事件類掃描改到了編譯期,

加快服務的啟動時間,減少各種容器差異導致的類掃描問題。

使用

maven


<dependency>
    <groupId>net.dreamlu</groupId>
    <artifactId>JFinal-event</artifactId>
    <version>3.0.0</version>
</dependency>

gradle >= 5.x


api("net.dreamlu:JFinal-event:3.0.0")
annotationProcessor("net.dreamlu:JFinal-event:3.0.0")

gradle < 5.x


compile("net.dreamlu:JFinal-event:3.0.0")

注意

  1. 3.0.0 由於使用了 Annotation Processor 技術,Idea 需要開啟註解處理器。

  2. 對於手動導入 jar(非 maven、gradle)依賴管理的,您需要手動注入事件類或者在 classes 目錄下新建 META-INF/dream.events 文件,格式如下:


net.dreamlu.event.test.Test1Listener
net.dreamlu.event.test.Test2Listener

啟動插件(v3.0.0 去掉了類掃描更加簡單)


// 初始化插件
EventPlugin plugin = new EventPlugin();
// 設置為非同步,默認同步,或者使用`threadPool(ExecutorService executorService)`自定義線程池。
plugin.async();
​
// 手動啟動插件,用於main方法啟動,jfinal中不需要,添加插件即可。
plugin.start();
​
// 停止插件,用於main方法測試,jfinal中不需要,添加插件即可。
plugin.stop();

新建事件類


public class AccountEvent {
​
    private Integer id;
    private String name;
    private Integer age;
​
    // 省略 get set
}

編寫監聽方法


public class Test1Listener {
​
    @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 {
​
    @EventListener({Test1Event.class, Test2Event.class})
    public void applicationEvent(ApplicationEvent event) {
        String xx = (String) event.getSource();
        System.out.println(Thread.currentThread().getName() + "\tsource:" + xx);
    }
}
  • order排序,數值越小越先執行,默認為Integer.MAX_VALUE

  • async非同步執行,需要插件開啟async()或者自定義線程池。

  • condition表達式條件,使用event.xxxx,event.isExec() == true判定event的屬性或者方法。

回顧

或許這是最後的一個版本了,由於精力問題,筆者已經停止更新其他的幾個 JFinal 插件,下面隨我一起回顧下 JFinal-event 的這4年多。

  1. 2015-04-27 22:19:33 初始化項目 網名(孤獨的√3)

  2. 2015-05-06 23:40:53 v0.1 版本發布推送到 maven 中央庫

  3. 2015-06-25 21:01:13 v0.3 支持非同步,去掉了 guava 包,因為只用了一個 Multimap 集合。

  4. 2015-07-04 17:43:23 v0.4.2 添加事件排序

  5. 2016-08-19 10:46:58 v1.4.0 添加事件 tag

  6. 2017-04-22 00:10:41 v1.5.1 添加了基於 rmi 的遠程 Event(2.x棄用)

  7. 2017-10-10 11:23:34 v2.0.0 基於註解和方法的兼聽,不再需要單獨編寫 Listener 類。

  8. 2018-03-02 17:05:33 v2.1.0 添加CtrlHolderEvent處理同步、非同步中request、session、header等參數傳遞。網名(如夢技術)

  9. 2018-10-09 21:37:18 v2.2.2 升級到 jfinal 3.5 支持JFinal新版本的 bean inject。

  10. 2019-04-08 20:55:52 v2.3.0 支持普通類作為 event 事件源,不再需要繼承 ApplicationEvent

感謝碼雲提供了這麼好的一個平台作為碼雲提供了這麼一個優秀的平台,也感謝 JFinal 從 JFinal 中學習到了不少極簡設計。

最後

筆者近2年將更多的精力放到的我的新開源——Spring Cloud 微服務開發核心包 mica:https://gitee.com/596392912/mica 歡迎 star ,各種騷操作等你來發現。


[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108396/jfinal-event-3-0-0-released
JFinal-event 3.0.0 發布,插件啟動速度提升十倍已經有225次圍觀

http://coctec.com/news/all/show-post-210346.html