自動配置類org.springframework.boot.autoconfigure.transaction.transactionautoconfiguration
配置類**不貼了,但配置類中有個重要的註解是一定要的@enabletransactionmanagement
@target
(elementtype.type)
@retention
(retentionpolicy.runtime)
@documented
// 這裡是匯入事務管理配置
@import
(transactionmanagementconfigurationselector.
class
)public @inte***ce
enabletransactionmanagement
配置選擇器類transactionmanagementconfigurationselector
關於selector 是怎麼匯入配置的看我的部落格
public
class
transactionmanagementconfigurationselector
extends
advicemodeimportselector
or* for
* and values of ,
* respectively.
*/@override
protected string[
]selectimports
(advicemode advicemode)
;case aspectj:
return
newstring
;default
:return null;}}
private string determinetransactionaspectclass()
}
autoproxyregistrar
註冊infrastructureadvisorautoproxycreator
public
void
registerbeandefinitions
(annotationmetadata importingclassmetadata, beandefinitionregistry registry)
object mode = candidate.
get(
"mode");
object proxytargetclass = candidate.
get(
"proxytargetclass");
if(mode != null && proxytargetclass != null && advicemode.
class
== mode.
getclass()
&& boolean.
class
== proxytargetclass.
getclass()
)}}}
if(!candidatefound && logger.
isinfoenabled()
)}public
static beandefinition registerautoproxycreatorifnecessary
(beandefinitionregistry registry)
@nullable
public
static beandefinition registerautoproxycreatorifnecessary
( beandefinitionregistry registry,
@nullable object source)
infrastructureadvisorautoproxycreator
實現了介面beanpostprocessor
的postprocessafterinitialization
方法
spring 在生成bean 時呼叫到org.springframework.beans.factory.support.abstractautowirecapablebeanfactory#initializebean
方法,該方法內就會呼叫到介面beanpostprocessor
的postprocessafterinitialization
方法
infrastructureadvisorautoproxycreator 對方法postprocessafterinitialization的實現如下,就進入到aop**建立過程
public object postprocessafterinitialization
(@nullable object bean, string beanname)
}return bean;
}
transactionmanagementconfigurationselector
類還匯入了乙個類proxytransactionmanagementconfiguration
public
class
proxytransactionmanagementconfiguration
extends
abstracttransactionmanagementconfiguration
return advisor;
}//transactionattributesource 包含解析器, 解析@transactional註解中的資訊
@bean
@role
(beandefinition.role_infrastructure)
public transactionattributesource transactionattributesource()
// 配置事務***
@bean
@role
(beandefinition.role_infrastructure)
public transactioninterceptor transactioninterceptor
( transactionattributesource transactionattributesource)
return interceptor;
}}
從**可以看出proxytransactionmanagementconfiguration 配置類配置了三個bean
transactionattributesource 包含解析器, 解析@transactional註解中的資訊
transactioninterceptor 在**bean 中實際對事務進行攔截
參考部落格
Springboot如何使用AOP
切面的包 1 springboot 不自帶aop 需要自己新增依賴 org.springframework.bootgroupid spring boot starter aopartifactid dependency 2 直接 aspect寫切面類就行了1 連線點 可以理解為需要被增強的方法 2...
在SpringBoot中配置aop
aop作為spring的乙個強大的功能經常被使用,aop的應用場景有很多,但是實際的應用還是需要根據實際的業務來進行實現。這裡就以列印日誌作為例子,在springboot中配置aop 已經加入我的github模版中 經過那麼長時間的過程,我們也慢慢體會到,在spingboot專案中新增元素是非常方便...
Spring Boot 之優雅使用 AOP
aop為aspect oriented programming的縮寫,意思是面向切面程式設計,通過預編譯的方式和執行時動態 實現程式功能的統一維護的一種技術。利用aop可以對業務邏輯進行分離,降低耦合度,提高可重用性,提高開發效率。主要用途 日誌記錄 事務處理 異常處理 安全處理 效能統計 在spr...