0
点赞
收藏
分享

微信扫一扫

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?


SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_scala


从类的继承关系看InfrastructureAdvisorAutoProxyCreator是一个BeanPostProcessor.

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_类的继承_02

@EnableTransactionManagement注解导入了TransactionManagementConfigurationSelector类,它的代码如下:

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_动态代理_03


这个ImportSelector的selectImports方法返回了一个AutoProxyRegistrar,AutoProxyRegistrar代码如下:

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_动态代理_04


SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_scala_05


可以看到它调用了AopConfigUtils.registryAutoProxyCreatorIfNecessary方法,它的代码如下:

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_类的继承_06


它调用了重载的registryAutoProxyCreatorIfNecessary方法,它的代码如下:

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_动态代理_07


可以它调用了registerOrEscalateApsAsRequired方法,它的代码如下:

SpringBoot复习(54)用于事务处理的InfrastructureAdvisorAutoProxyCreator BeanPostProcessor是在哪里被注册到容器的?_spring boot_08


可见,它把传入的InfrastructureAdvisorAutoProxyCreator类包装成了BeanDefinition注册到了Spring容器。

这个BeanPostProcessor会使用BeanFactoryTransactionAttributeSourceAdvisor来生成代理对象(默认使用cglib动态代理)


举报

相关推荐

0 条评论