天天看點

spring事務管理 TransactionProxyFactoryBean源碼分析

J2EE,當然離不開事務,事務又當然少不了Spring聲明式事務。spring聲明式事務,很多碼農門,應該和筆者一樣,停留在使用上,及僅僅了解點原理。如:Spring事務管理原理“代理+AOP”,再深入了解就不太清楚了。一直對聲明式事務實作特别感興趣,今天抽時間,剖析一下下。

1.準備

 BeanFactory,及對象生成周期

 AOP代理對象生成過程

1.1.BeanFactory 及生命周期

spring事務管理 TransactionProxyFactoryBean源碼分析

Factory class name

作用

ListableBeanFactory

枚舉所有的bean執行個體

HierarchicalBeanFactory

維護工廠父子關系

ConfigurableBeanFactory

配置BeanFactory

AutowireCapableBeanFactory

維護ean屬性注入和依賴關系維護

ConfigurableListableBeanFactory

BeanFacotry配置清單,指定忽略接口

SingletonBeanRegistry

維護單例關系

FactoryBeanRegistrySupport

針對FactoryBean,維護單例關系

AbstractBeanFactory

ConfigurableBeanFactory SPI.

AbstractAutowireCapableBeanFactory

提供create bean預設實作

DefaultListableBeanFactory

一個基于bean定義對象的完整的bean工廠;預設

總之,spring容器中涉及的對象,都是通過上面的BeanFactory樹結構中建立而來。生成的代理對象也是如此。

1.2 周期lifecycle

 1. BeanNameAware's setBeanName

 2. BeanClassLoaderAware's setBeanClassLoader

 3. BeanFactoryAware's setBeanFactory

 4. ResourceLoaderAware's setResourceLoader (only applicable when running in an application context)

 5. ApplicationEventPublisherAware's setApplicationEventPublisher (only applicable when running in an application context)

 6. MessageSourceAware's setMessageSource (only applicable when running in an application context)

 7. ApplicationContextAware's setApplicationContext (only applicable when running in an application context)

 8. ServletContextAware's setServletContext (only applicable when running in a web application context)

 9. postProcessBeforeInitialization methods of BeanPostProcessors

 10. InitializingBean's afterPropertiesSet

 11. a custom init-method definition

 12. postProcessAfterInitialization methods of BeanPostProcessors

beanfactory shutdown

 1. DisposableBean's destroy

 2. a custom destroy-method definition

其中生成代理對象,僅僅是上面(1-12)步驟中的一步而已。

1.2 AOP 代理對象生成

spring事務管理 TransactionProxyFactoryBean源碼分析

1.2.1 TargetClassAware

用于将目标類暴露在代理後面的最小界面。

1.2.2 Advised

AOP代理配置接口

1.2.3 AdvisedSupport

AOP代理配置管理器的基類

1.2.4 ProxyCreatorSupport

proxy factory的基類

1.2.5 生成序列圖

spring事務管理 TransactionProxyFactoryBean源碼分析

需要關注:

1.生成代理時機:在afterPropertiesSet中,(對應10. InitializingBean's afterPropertiesSet)

2.委派給AopProxy具體實作類生成代理對象。

1.3 AOP 攔截器實作(具體發生在每次函數調用過程中)

spring事務管理 TransactionProxyFactoryBean源碼分析

Advisor規則應用過程,發生在具體方法調用過程中,此時代理對象已經生成了。

主要工作:

維護Advisor鍊

比對過程,主要通過Pointcut中的ClassFiter,和MethodMatcher完成。

2.TransactionProxyFactoryBean 對象剖析

2.1 類圖

spring事務管理 TransactionProxyFactoryBean源碼分析

2.1.1 ProxyConfig

友善的用于建立代理的超類配置,以確定所有代理建立者具有一緻的屬性。

2.1.2 AbstractSingletonProxyFactoryBean

友善的FactoryBean類型的超類,産生單例範圍的代理對象。

2.1.3 TransactionProxyFactoryBean

代理工廠bean,用于簡化的聲明性事務處理。

2.1.4 使用配置

2.2 TransactionProxyFactoryBean分析

2.2.1類圖

spring事務管理 TransactionProxyFactoryBean源碼分析

2.2.2 序列圖

spring事務管理 TransactionProxyFactoryBean源碼分析

事務模闆入口

org.springframework.transaction.interceptor.TransactionInterceptor

public Object invoke(@NotNull MethodInvocation invocation)

事務管理模闆