日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bean 属性设置默认值_activiti7源码分析之引擎初始化与Bean注入

發布時間:2024/1/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bean 属性设置默认值_activiti7源码分析之引擎初始化与Bean注入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在之前的一篇文章中,介紹了Soringboot2與activiti7整合,本文我們看下整合后的activiti7是如何初始化的,以及相關Bean如何注入。

配置和創建工作流引擎

首先第一個問題,activiti7的初始化工作是怎么啟動呢?我得從盤古開天辟地說起,順便復習下Springboot相關知識。

Springboot的main函數上有個注解@SpringBootApplication,我們看下這個注解的的實現,只看關鍵部分:

在這段代碼中有一個關鍵的注解@EnableAutoConfiguration,這個注解的作用是顧名思義的就是允許自動配置,怎么實現呢,繼續看@EnableAutoConfiguration的源碼:

在這段代碼中,@Import({AutoConfigurationImportSelector.class})的作用是將AutoConfigurationImportSelector這個類注冊為Bean交給容器管理。這個類里面有個關鍵方法public String[] selectImports(AnnotationMetadata annotationMetadata)``,作用是掃描所有包(包含依賴jar包)中的``META-INF/spring.factories``文件,把其中key為"...EnableAutoConfiguration"對應的value里的類都加載為Bean。

看下activiti-spring-boot-starter這個包中spring.factories文件的內容:

所以,這個文件里面的三個類都被加載為Bean。即EndpointAutoConfiguration,ProcessEngineAutoConfiguration,ActivitiMethodSecurityAutoConfiguration這三個。這就是Springboot的自動配置原理。總結起來就是@EnableAutoConfiguration會自動掃描所有包下面的META-INF/spring.factories文件,將其中key以EnableAutoConfiguration結尾的對應的value的類全部加載為Bean。這就是SPI機制,與JDK中的SPI和DUBBO的SPI類似,但是具體實現方法不一樣。關于SPI我之后會詳細講解。

我們關注ProcessEngineAutoConfiguration這個Bean,其余兩個以后再解釋。

看下ProcessEngineAutoConfiguration這個類部分的源碼:

這個類主要作用的就是流程引擎的配置,注解@EnableConfigurationProperties({ActivitiProperties.class, AsyncExecutorProperties.class})會將在properties中的配置屬性映射到對應的類的屬性中去。例如常用的在application-dev.properties配置的database-schema-update,history-level,db-history-used等屬性就是在這里被映射到類ActivitiProperties中去的,然后在SpringProcessEngineConfiguration springProcessEngineConfiguration()方法中添加到引擎配置類中的。

ProcessEngineAutoConfiguration中會注冊很多Bean,其中有個比較重要:

SpringProcessEngineConfiguration這個Bean主要負責流程引擎的配置,將數據源和Springboot配置文件中配置的activiti7的相關屬性配置到引擎中去。這個Bean被注解@ConditionalOnMissingBean修飾,意思是只有在容器中不存在SpringProcessEngineConfiguration的情況下這個Bean才會被注冊,因此如果要自定義自己的引擎配置,重新定義一個SpringProcessEngineConfiguration類型的Bean即可。

ProcessEngineAutoConfiguration繼承了AbstractProcessEngineAutoConfiguration,這個抽象類里面定義了幾個比較重要的Bean:

ProcessEngineFactoryBean這個Bean的主要作用產生ProcessEngine Bean,可以理解為是產生Bean的Bean,比較拗口。這個Bean實現了FactoryBean接口,FactoryBean接口是spring里面一個接口,與它長得比較類似的事BeanFactory,它們作用完全不一樣。FactoryBean是一個工廠Bean,可以生成某一個類型Bean實例,它最大的一個作用是:可以讓我們自定義Bean的創建過程。BeanFactory是一個接口,它是Spring中工廠的頂層規范,是SpringIoc容器的核心接口,它定義了getBean()、containsBean()等管理Bean的通用方法。Spring的容器都是它的具體實現,它負責管理所有的Bean,包括FactoryBean。

上面說到FactoryBean可以讓我們自定義Bean的創建過程,那么怎么定義呢,方法很簡單,只要實現FactoryBean的getObject方法即可。看下ProcessEngineFactoryBean中getObject的實現:

這里返回的類型也就是這個ProcessEngineFactoryBean產生的Bean即為Processengine。說了這么多,可以簡單概括為ProcessEngineFactoryBean主要是負責產生一個Processengine,實現引擎Bean的注入。

這個抽象類中還注入了其他常用的Bean,例如RuntimeService,RepositoryService,HistoryService,TaskService等。

與這個過程類似,在初始化的時候還加載了許多其他類型的Bean。

在ProcessEngineFactoryBean的getObject方法是為了創建Processengine,其中最關鍵的代碼:

this.processEngine = this.processEngineConfiguration.buildProcessEngine();跟進去看這里的buildProcessEngine()的具體實現:

其中的this.autoDeployResources(processEngine);會在項目啟動的時候將classpath:*/processes/``目錄下的流程圖自動部署。可以通過``spring.activiti.deployment-mode``這個屬性設置各種不同的部署策略。

這次先講到這里,下次介紹下activiti7的命令模式。

總結

以上是生活随笔為你收集整理的bean 属性设置默认值_activiti7源码分析之引擎初始化与Bean注入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。