官术网_书友最值得收藏!

6.1 初始化事件轉發器

事件轉發器的初始化過程如代碼清單6-1所示。

代碼清單6-1 ProcessEngineConfigurationImpl.java

如果想要使用事件轉發器發布事件,那么初始化事件轉發器是一個必不可少的環節,下面概括總結initEventDispatcher方法的初始化邏輯。

(1)第6~7行初始化前的準備工作。

在2.4節中詳細講了開關屬性的初始化過程,簡單概括為:首先判斷指定的開關屬性值是否為空,如果不為空則直接使用客戶端指定的類或者值進行初始化,否則使用系統內置的類或者具體值進行初始化工作。事件轉發器的處理也不例外,引擎默認使用的事件轉發器為ActivitiEventDispatcherImpl類,當然也可以通過設置ProcessEngineConfigurationImpl類中的eventDispatcher屬性值注入自定義事件轉發器。

(2)開啟事件轉發功能。

第9行設置eventDispatcher對象的屬性enabled值為true,從該屬性的默認值可以看出,流程引擎默認開啟了事件轉發功能,如果開發人員不打算使用Activiti中的事件轉發功能,可以將該enableEventDispatcher開關屬性值設置為false從而對事件轉發功能進行全局禁用。

(3)注冊全局事件監聽器。

首先第10行判斷eventListeners集合是否為空,如果該集合不為空,則第11~12行循環遍歷該集合并調用eventDispatcher對象中的addEventListener方法注冊全局事件監聽器。

(4)注冊具體類型的事件監聽器。

步驟(3)負責注冊全局事件監聽器,第14~19行負責注冊具體類型的事件監聽器,typedEventListeners集合為Map數據結構,key對應具體的事件類型,value對應具體類型的事件監聽器,處理流程比較簡單,首先遍歷typedEventListeners集合,第16行提取key值并將其轉化為ActivitiEventType類型的數組(具體處理過程是將key值使用“, ”進行分割,可以參考getTypesFromString方法的具體實現),最后第17~18行根據listenerToAdd對象和types進行具體類型的事件監聽器的注冊工作。

建議

在實際項目開發中,建議開發人員開啟事件轉發功能。

主站蜘蛛池模板: 建德市| 泸西县| 霍山县| 广饶县| 山阳县| 丰镇市| 亳州市| 长岛县| 内黄县| 墨玉县| 枣强县| 库尔勒市| 扎鲁特旗| 松溪县| 措美县| 清河县| 阿勒泰市| 香格里拉县| 姜堰市| 石城县| 郎溪县| 加查县| 邓州市| 汕尾市| 惠州市| 福鼎市| 星子县| 南投市| 卫辉市| 耿马| 安国市| 洪湖市| 三河市| 虹口区| 仁怀市| 晴隆县| 穆棱市| 始兴县| 汝州市| 新乡市| 通许县|