1.注入4个bd
InfrastructureAdvisorAutoProxyCreator 父类:AbstractAutoProxyCreator
BeanFactoryTransactionAttributeSourceAdvisor 父类:Advisor
TransactionInterceptor 父类:Advice
AnnotationTransactionAttributeSource
2.执行
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessBeforeInstantiation
逻辑分析:遍历所有的bd:
获取beanname->判断beanname是否有长度并且没有被处理过->是否遍历放入advisedBeans->
是否是基础类->是否该跳过
4大基础类
3.执行org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProcessAfterInitialization
判断是否需要增强逻辑:
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNecessary
根据切面创建代理逻辑:
寻找所有的advisor
org.springframework.aop.support.AopUtils#findAdvisorsThatCanApply
寻找所有advisor且可以申请使用的bean
org.springframework.aop.support.AopUtils#canApply(org.springframework.aop.Advisor, java.lang.Class<?>, boolean)
org.springframework.transaction.interceptor.TransactionAttributeSourcePointcut#matches
org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#getTransactionAttribute
org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#computeTransactionAttribute
1.首先去类对应的方法中寻找是否有@Transaction
2.方法找不到去类上找
3.类上找不到再去接口方法找
4.接口方法找不到再去接口找,
4步都找不到那么直接返回null,找到了就创建代理对象。
文章来源地址https://www.toymoban.com/news/detail-430977.html文章来源:https://www.toymoban.com/news/detail-430977.html
到了这里,关于spring事物初始化过程分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!