文章内容输出来源:拉勾教育Java高薪训练营

AOP源码分析类方法调用关系

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#i nitializeBean
调用
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#a pplyBeanPostProcessorsAfterInitialization
调用
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#postProce ssAfterInitialization(后置处理器AbstractAutoProxyCreator完成bean代理对象创建)
调用
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#wrapIfNec essary
调用
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator#createPro xy (在这一步把委托对象的aop增强和通用拦截进行合并,最终给代理对象)
调用
org.springframework.aop.framework.DefaultAopProxyFactory#createAopProxy 
调用
org.springframework.aop.framework.CglibAopProxy#getProxy(java.lang.ClassLoader )

声明式事务分析类方法调用关系

 
@EnableTransactionManagement 注解 
1)通过@import引入了TransactionManagementConfigurationSelector类
它的selectImports方法导入了另外两个类:AutoProxyRegistrar和ProxyTransactionManagementConfiguration 

2)AutoProxyRegistrar类分析方法registerBeanDefinitions中,引入了其他类,通过AopConfigUtils.registerAutoProxyCreatorIfNecessary(registry)引入
InfrastructureAdvisorAutoProxyCreator,它继承了AbstractAutoProxyCreator,是一个后置处理器类

3)ProxyTransactionManagementConfiguration 是一个添加了@Configuration注解的配置类 (注册bean)
注册事务增强器(注入属性解析器、事务拦截器) 
属性解析器:AnnotationTransactionAttributeSource,内部持有了一个解析器集合Set<TransactionAnnotationParser> annotationParsers; 
具体使用的是SpringTransactionAnnotationParser解析器,用来解析
@Transactional的事务属性 
事务拦截器:TransactionInterceptor实现了MethodInterceptor接口,该通用拦截会在产生代理对象之前和aop增强合并,最终一起影响到代理对象 TransactionInterceptor的invoke方法中invokeWithinTransaction会触发原有业
务逻辑调用(增强事务)
Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐