@enabletransactionmanagement
利用transactionmanagementconfigurationselector
往容器中注入了兩個類
autoproxyregistrar
、proxytransactionmanagementconfiguration
autoproxyregistrar
往容器中注入了infrastructureadvisorautoproxycreator
infrastructureadvisorautoproxycreator
也是利用後置處理器機制,在物件建立後,然後包裝物件返回乙個**物件
檢視它的父類,發現跟實現aop的方式是類似的,都是根據一些規則找到對應的增強器,然後封裝成methodinterceptor
,當物件呼叫目標方法時,動態**機制就會鏈式呼叫這些***。
infrastructureadvisorautoproxycreator
extends
abstractadvisorautoproxycreator
extends
abstractautoproxycreator
extends
proxyprocessorsupport
implements
smartinstantiationawarebeanpostprocessor
, beanfactoryaware
proxytransactionmanagementconfiguration
類資訊如下
@configuration
public
class
proxytransactionmanagementconfiguration
extends
abstracttransactionmanagementconfiguration
@bean
( name =
)// 給容器中增加了事務增強器
@role(2
)public beanfactorytransactionattributesourceadvisor transactionadvisor()
return advisor;
}// 事務註解解析器
@bean
@role(2
)public transactionattributesource transactionattributesource()
// 事務***, 它繼承了 methodinterceptor
// 因此在收集增強器的時候,這個也會被收集進去
@bean
@role(2
)public transactioninterceptor transactioninterceptor()
return interceptor;
}}
下面主要檢視transactioninterceptor#invoke
方法
public
class
transactioninterceptor
extends
transactionaspectsupport
implements
methodinterceptor
, serializable
}
public
abstract
class
transactionaspectsupport
implements
beanfactoryaware
, initializingbean
catch
(throwable ex)
finally
// 6. 如果執行正常,則拿到事務管理器,提交事務
committransactionafterreturning
(txinfo)
;return retval;
}else
}}
spring 基礎14 spring常用註解彙總
使用註解之前要開啟自動掃瞄功能 其中base package為需要掃瞄的包 含子包 configuration把乙個類作為乙個ioc容器,它的某個方法頭上如果註冊了 bean,就會作為這個spring容器中的bean。scope註解 作用域 lazy true 表示延遲初始化 service用於標註...
Spring事務底層原理
由於spring解決的問題是對單個資料庫進行區域性事務處理的,具體的實現首先用了spring中的ioc劃分了事務處理單元。並且將對事務的各種配置放到了ioc容器中 設定事務管理器,設定事務的傳播特性即隔離機制 spring事務處理模組是通過aop功能來實現宣告式處理機制的,具體操作 比如事務實行的配...
Spring 事務底層原理
由於 spring 解決的問題是對單個資料庫進行區域性事務處理的,具體的實現首相用 spring 中的 ioc 劃分了事務處理單元。並且將對事務的各種配置放到了 ioc 容器中 設定事務管理器,設定事務的傳播特性及隔離機制 spring 事務處理模組是通過 aop 功能來實現宣告式事務處理的,具體操...