- Activiti權威指南
- 冀正
- 955字
- 2020-11-28 15:59:55
2.5 配置器
代碼清單2-20中initConfigurators方法所做的工作就是初始化“配置器”,上文講解的兩種配置風格的配置文件中分別定義了不同的流程引擎配置類,例如StandaloneProcess-EngineConfiguration類,但是在XML中定義流程引擎配置類有如下三個缺點。
(1)不靈活,所有的屬性信息都需要在XML文檔中進行配置。
(2)不能滿足動態屬性配置需求,如果開發人員打算使用編程方式構造流程引擎配置類的實例對象,則這種方式幾乎不可能實現。
(3)不能檢查必要的屬性值是否已經被初始化,比如開發人員期望檢查數據源的信息,則配置方式不能達到這個訴求。
2.5.1 初始化配置器
Activiti在5.13版本中增加了“配置器”,進而可以通過編程的方式動態修改或者刷新流程引擎配置類實例對象中的屬性值,所有的配置器均需要實現ProcessEngine-Configurator接口。下面分析initConfigurators方法的處理過程,如代碼清單2-21所示。
代碼清單2-21 ProcessEngineConfigurationImpl.java

下面對initConfigurators方法的處理邏輯加以總結。
(1)第5行實例化allConfigurators集合,該集合用于存儲所有的配置器實例。
(2)第6行判斷開關屬性configurators是否為空,如果該屬性值不為空,則循環遍歷該集合,并將遍歷的值添加到allConfigurators集合中。
(3)判斷開關屬性enableConfiguratorServiceLoader是否為true,如果是則執行后續操作,該值默認為true。
? 第12行獲取類加載器實例classLoader。
? 第16~17行利用Java中的ServiceLoader特性加載ProcessEngineConfigurator實例集合,第18~19行循環遍歷configuratorServiceLoader集合并將遍歷的值添加到allConfigurators集合中?!?第21行判斷allConfigurators集合是否為空,如果不為空,則執行第22~30行對該集合中的元素按照ProcessEngineConfigurator類中getPriority方法的返回值進行升序排序。
注意
classLoader為開關屬性。
2.5.2 配置器實戰
上面詳細講解了配置器的初始化過程,下面討論一下配置器的全局架構(如圖2-4所示)。

圖2-4 ProcessEngineConfigurator架構圖
(1)ProcessEngineConfigurator:該接口定義了beforeInit方法(在configuratorsBeforeInit方法中調用)、configure方法(在configuratorsAfterInit方法中調用)、getPriority方法(在初始化配置器方法initConfigurators中調用)。
(2)AbstractProcessEngineConfigurator:對ProcessEngineConfigurator接口進行了實現,作為模板抽象類存在,并重寫了getPriority方法,該方法的返回值默認為10000。
了解以上知識點之后,接下來學習如何自定義配置器并修改流程引擎配置類實例的屬性值,相關實現如代碼清單2-22所示。
代碼清單2-22 ShareniuConfiguratorA.java

定義了配置器之后,接下來的工作就是把自定義配置器注入流程引擎配置類,如代碼清單2-23所示。
代碼清單2-23 activiti.cfg.xml

對自定義配置器進行測試驗證,具體實現如代碼清單2-24所示。
代碼清單2-24 App.java

執行上述代碼,得到輸出結果如下:
A:beforeInit A:configure
在學習自定義配置器的同時,也學會了如何通過獲取以及設置ProcessEngineConfigur-ationImpl實例對象的屬性值,關于配置器更高級的用法以及使用技巧可以參考8.10.4節。
- 數據庫程序員面試筆試真題與解析
- C程序設計簡明教程(第二版)
- Microsoft Exchange Server PowerShell Cookbook(Third Edition)
- Web Application Development with MEAN
- Learning Laravel 4 Application Development
- Java Web開發技術教程
- Learning SciPy for Numerical and Scientific Computing(Second Edition)
- Android開發:從0到1 (清華開發者書庫)
- Hands-On Neural Network Programming with C#
- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)
- INSTANT Apache ServiceMix How-to
- R的極客理想:量化投資篇
- 人人都能開發RPA機器人:UiPath從入門到實戰
- 從零開始:C語言快速入門教程
- Python應用與實戰