spring开启事务依赖注解@EnableTransactionManagement,可以看到这个注解上面@Import上引入进来了一个类TransactionManagementConfigurationSelector,那么spring在解析注解的过成功就会调用TransactionManagementConfigurationSelector的selectImports方法。
可以看到这里引入进来了两个类,分别是AutoProxyRegistrar,ProxyTransactionManagentConfiguration
AutoProxyRegistrar的类型是ImportBeanDefinitionRegistrar,那么注解解析的过程中同样会去调用这个接口的registerBeanDefinitions方法,然后将InfrastructureAdvisorAutoProxyCreator类加入了BeanDefinitionRegistry中,最终由spring实例化
再来看下InfrastructureAdvisorAutoProxyCreator类型,看到了熟悉的wrapIfNecessary方法,那么看到这里大致就能知道会对类进行代理。
既然会生成代理,那么就肯定有对应的MethodInterceptor,我们看@Import引入进来的另外一个类ProxyTransactionManagementConfiguration,
ProxyTransactionManagementConfiguration是一个配置类,它又定义了另外三个bean:
1. BeanFactoryTransactionAttributeSourceAdvisor:一