JFinal-event 2.x
參考 Spring 4.2.x
中 Event
的使用方式而生,爲 JFinal
用戶帶來更多方便。其核心目標是深層次解耦,爲您節約更多時間,去陪戀人、家人和朋友 :)vue
年初 @idoz 提議實現相似 Spring 4.2 裏的 PayloadApplicationEvent,其實我早就有此想法,一直沒有抽出時間來折騰。java
順便在 碼雲上添加了 issues 3.0優化,有2點功能:git
class1 爲 ApplicationEvent 類 或者 PayloadApplicationEvent類信息 class2 爲 ApplicationEvent 泛型,或者 Payload 中的類信息數組
因爲 @EventListener 註解能夠在任何方法中,annotation Processor 須要掃描 *
,而後 找出 對應的含有 @EventListener
方法的類,而後寫入 META-INF/dream.events
文件中。架構
本次版本升級完成了第一點,第二點因爲以爲更加適合底層框架去實現,從而方便擴展,對於 annotation Processor 感興趣的朋友能夠了解個人開源 mica-autoapp
@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();
複製代碼
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(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包下載 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…掃描上面二維碼,更多精彩內容天天推薦!async