說明
JFinal-event 2.x
參考 Spring 4.2.x
中 Event
的使用方式而生,為 JFinal
使用者帶來更多方便。其核心目標是深層次解耦,為您節約更多時間,去陪戀人、家人和朋友 :)
年初 @idoz 提議實現類似 Spring 4.2 裡的 PayloadApplicationEvent,其實我早就有此想法,一直沒有抽出時間來折騰。
順便在 碼雲上新增了 issues 3.0優化,有2點功能:
第一點,實現 PayloadApplicationEvent 不難。擴充套件個 EventType
class1 為 ApplicationEvent 類 或者 PayloadApplicationEvent類資訊 class2 為 ApplicationEvent 泛型,或者 Payload 中的類資訊
第二點,將類掃描改為 annotation Processor 編譯期處理(避免容器環境差異)
由於 @EventListener 註解可以在任何方法中,annotation Processor 需要掃描 *
,然後 找出 對應的含有 @EventListener
方法的類,然後寫入 META-INF/dream.events
檔案中。
本次版本升級完成了第一點,第二點由於覺得更加適合底層框架去實現,從而方便擴充套件,對於 annotation Processor 感興趣的朋友可以瞭解我的開源 mica-auto
更新說明
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()")
複製程式碼
說明
value
或events
支援的事件型別陣列,用於將事件方法定義為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>
複製程式碼
開源推薦
mica
Spring boot 微服務核心元件集:gitee.com/596392912/m…Avue
一款基於vue可配置化的神奇框架:gitee.com/smallweigit…pig
宇宙最強微服務(架構師必備):gitee.com/log4j/pigSpringBlade
完整的線上解決方案(企業開發必備):gitee.com/smallc/Spri…IJPay
支付SDK讓支付觸手可及:gitee.com/javen205/IJ…
關注我們
掃描上面二維碼,更多精彩內容每天推薦!