spring源碼獲取所有Advisor記錄

接着上一篇spring實例化包含@Transational註解類(不論是類上還是方法上)的流程。

1.在BeanPostProcesser的實現類AbstractAutoProxyCreator的wrapIfNecessary方法裏調用getAdvicesAndAdvisorsForBean方法

2.在其父類AbstractAdvisorAutoProxyCreator的getAdvicesAndAdvisorsForBean方法裏會調用findEligibleAdvisors方法

3.在findCandidateAdvisors方法裏委託advisorRetrievalHelper屬性查找advisor,這裏的advisorRetrievalHelper的類型是BeanFactoryAdvisorRetrievalHelper


 

4.在findAdvisorBeans方法裏首先使用BeanFactoyUtils根據類型獲取所有的beanName,再調用getBean方法獲取所有Advisor實例對象

 

而其中有關事務處理的BeanFactoryTransactionAttributeSourceAdvisor的bean加載其實是在ProxyTransactionManagementConfiguration類中完成的。

ProxyTransactionManagementConfiguration類繼承了抽象類AbstractTransactionManagementConfiguration,我們看下AbstractTransactionManagementConfiguration類裏有定義了什麼。這個類最重要就是決定了用哪個事務管理器,以便設置給TransactionInterceptor對象。

 

在ProxyTransactionManagementConfiguration類中除了配置了BeanFactoryTransactionAttributeSourceAdvisor外還配置了AnnotationTransactionAttributeSource類型 的TransactionAttributeSource和TransactionInterceptor對象,其中AnnotationTransactionAttributeSource的作用就是通過解析註解獲取事務屬性對象TransactionAttribute

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章