springboot 事務aop自動配置

2021-10-02 17:34:56 字數 3537 閱讀 6185

自動配置類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實現了介面beanpostprocessorpostprocessafterinitialization方法

spring 在生成bean 時呼叫到org.springframework.beans.factory.support.abstractautowirecapablebeanfactory#initializebean方法,該方法內就會呼叫到介面beanpostprocessorpostprocessafterinitialization方法

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...