Spring事务管理原理
Spring事务管理的实现可以分为两个部分来讲:
- 借力AOP:如何通过AOP使事务管理生效;
- 事务管理:事务管理的本质是什么;
我们先看看在生成代理时,是如何找到AspectJ形式声明的Advisor的。
提示:
AnnotationAwareAspectJAutoProxyCreator.findCandidateAdvisors()
方法查找过程中即查找了Spring AOP原来的Advisor,也查找了AspectJ声明的
我们仅列出Spring-AOP基础设施介绍-核心中不同的部分。
提示:
AspectJ在使用Joinpoint时,没有变化,所以略去了;
---共享原有基础设施
Cglib版在代理对象生成时,由方法和AOP上下文来决定具体使用哪个Callback,在运行时直接通过Callback进行方法调用。下面我们介绍两种类型的Callback:DynamicAdvisedInterceptor和FixedChainStaticTargetInterceptor,先从DynamicAdvisedInterceptor开始。
提示:
在确认Advisor是否适用Bean时,在Class层和Method层确认方向上是相反的:
1.Class层:当前Class是否在不匹配的集合内,是的话返回false;
2.Method层:当前Class层中只有有一个方法适用,就返回true;
大家有没有发现不管是缓存中获取的,还是不同作用域Bean实例生成,都调用了AbstractBeanFactory.getObjectForBeanInstance()方法,足见该方法的重要性。以下是验收的逻辑: