在 JFinal-event 3.0 比較激進的採用了註解處理器,在不使用 maven、gradle 等包管理或者開發工具不支持,
會導致不生成 dream.events 配置文件。對於這種情況你可以採用開啟類掃描的形式。
EventPlugin plugin = new EventPlugin(); // 設置為非同步,默認同步,或者使用`threadPool(ExecutorService executorService)`自定義線程池。 plugin.async(); // 開啟類掃描,默認為 false,用於不支持註解處理器的情況,用於不使用 maven 或者不支持註解處理器的情況。 plugin.enableClassScan(); // 掃描 jar 里的 監聽器,默認不掃描,在開啟 enableClassScan 有效果 plugin.scanJar(); // 掃描的包,默認全掃描,可提升啟動速度,在開啟 enableClassScan 有效果 plugin.scanPackage("com.xxx.包名"); // 手動啟動插件,用於main方法啟動,jfinal中不需要,添加插件即可。 plugin.start(); // 停止插件,用於main方法測試 plugin.stop();
如果你是使用的 maven ,我還是推薦你不用類掃描的方式,註解處理器可以提速項目啟動的時間。
或者你可以根據 JFinal.me().getConstants().getDevMode(),判斷是否開啟類掃描,因為註解處理器 maven 是支持的。
本地 ide 支持情況各不同,idea 中需要配置開啟註解處理器。
詳細使用說明請見:https://gitee.com/596392912/JFinal-event
JFinal event 適用於單服務內部的事件匯流排,當然也可以結合 mq 來使用,jfinal-event 曾經也開發過基於 rmi 的遠程事件版本。後期放棄了,畢竟使用 mq 會更有優勢。
1. 自定義 jfinal base model,cud 時發送 cud 事件,解耦代碼,任何地方都可以監聽 event。
2. 業務解耦,例如:下單完成時的功能:
a. 用戶積分
b. 簡訊消息
c. 郵件消息
d. 公眾號消息等
e. 非同步日誌
3. websocket中使用,將消息和業務解耦。
這時候我們可以在 支付完成後的業務代碼添加一個事件發送。
然後就可以將上面的幾個功能寫到不同的監聽器里,(一個事件是可以有多個監聽的)
事件無處不在,html 元素里都是事件監聽,如果真想清楚了一通百通。
eclipse:
idea:
plugin.scanJar();
plugin.scanPackage("com.xxx.包名");
ObjenesisBeanFactory
,已經沒有存在的意義。使用 JFinal-event 可以解耦複雜的業務邏輯,也給新手帶來不少疑惑,找不到具體的監聽邏輯。
Idea 為 Spring 開發了一個可以在 event 和 Listener 跳轉的插件,如下圖:
[admin
]