JFinal-event
是參考 Spring
中 Event
的使用方式而生,為 JFinal
用戶帶來更多方便。其核心目標是深層次解耦,為您節約更多時間,去陪戀人、家人和朋友 :)
距 gitee issues #IR96V 6個月,終於把【3.0優化】有生之年閑下來了弄吧的第二點優化進行了完善,鼓掌!!!
升級到jfinal 4.3。
完成【3.0優化 有生之年閑下來了弄吧】#IR96V 之2 將類掃描,改到編譯期。
刪除 ClassUtil
,但願大夥沒用這個類。
此次更新主要是採用 Annotation Processor
技術,將運行期的事件類掃描改到了編譯期,
加快服務的啟動時間,減少各種容器差異導致的類掃描問題。
<dependency> <groupId>net.dreamlu</groupId> <artifactId>JFinal-event</artifactId> <version>3.0.0</version> </dependency>
api("net.dreamlu:JFinal-event:3.0.0") annotationProcessor("net.dreamlu:JFinal-event:3.0.0")
compile("net.dreamlu:JFinal-event:3.0.0")
注意
3.0.0 由於使用了 Annotation Processor
技術,Idea 需要開啟註解處理器。
對於手動導入 jar
(非 maven、gradle)依賴管理的,您需要手動注入事件類或者在 classes 目錄下新建 META-INF/dream.events
文件,格式如下:
net.dreamlu.event.test.Test1Listener net.dreamlu.event.test.Test2Listener
// 初始化插件 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(events = Test1Event.class, order = 1, async = true, condition = "event.isExec()")
value
或 events
支持的事件類型數組,用於將事件方法定義為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年多。
2015-04-27 22:19:33 初始化項目 網名(孤獨的√3)
2015-05-06 23:40:53 v0.1 版本發布推送到 maven 中央庫
2015-06-25 21:01:13 v0.3 支持非同步,去掉了 guava 包,因為只用了一個 Multimap 集合。
2015-07-04 17:43:23 v0.4.2 添加事件排序
2016-08-19 10:46:58 v1.4.0 添加事件 tag
2017-04-22 00:10:41 v1.5.1 添加了基於 rmi 的遠程 Event(2.x棄用)
2017-10-10 11:23:34 v2.0.0 基於註解和方法的兼聽,不再需要單獨編寫 Listener 類。
2018-03-02 17:05:33 v2.1.0 添加CtrlHolderEvent處理同步、非同步中request、session、header等參數傳遞。網名(如夢技術)
2018-10-09 21:37:18 v2.2.2 升級到 jfinal 3.5 支持JFinal新版本的 bean inject。
2019-04-08 20:55:52 v2.3.0 支持普通類作為 event 事件源,不再需要繼承 ApplicationEvent
。
感謝碼雲提供了這麼好的一個平台作為碼雲提供了這麼一個優秀的平台,也感謝 JFinal 從 JFinal 中學習到了不少極簡設計。
筆者近2年將更多的精力放到的我的新開源——Spring Cloud 微服務開發核心包 mica:https://gitee.com/596392912/mica 歡迎 star ,各種騷操作等你來發現。
[admin
]