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

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 代理對象生成
1.2.1 TargetClassAware
用于将目标類暴露在代理後面的最小界面。
1.2.2 Advised
AOP代理配置接口
1.2.3 AdvisedSupport
AOP代理配置管理器的基類
1.2.4 ProxyCreatorSupport
proxy factory的基類
1.2.5 生成序列圖
需要關注:
1.生成代理時機:在afterPropertiesSet中,(對應10. InitializingBean's afterPropertiesSet)
2.委派給AopProxy具體實作類生成代理對象。
1.3 AOP 攔截器實作(具體發生在每次函數調用過程中)
Advisor規則應用過程,發生在具體方法調用過程中,此時代理對象已經生成了。
主要工作:
維護Advisor鍊
比對過程,主要通過Pointcut中的ClassFiter,和MethodMatcher完成。
2.TransactionProxyFactoryBean 對象剖析
2.1 類圖
2.1.1 ProxyConfig
友善的用于建立代理的超類配置,以確定所有代理建立者具有一緻的屬性。
2.1.2 AbstractSingletonProxyFactoryBean
友善的FactoryBean類型的超類,産生單例範圍的代理對象。
2.1.3 TransactionProxyFactoryBean
代理工廠bean,用于簡化的聲明性事務處理。
2.1.4 使用配置
2.2 TransactionProxyFactoryBean分析
2.2.1類圖
2.2.2 序列圖
事務模闆入口
org.springframework.transaction.interceptor.TransactionInterceptor
public Object invoke(@NotNull MethodInvocation invocation)
事務管理模闆