目录
二、@EnableTransactionManagement
2.2 ProxyTransactionManagementConfiguration
一、@Transactional
它的作用:
1.标识方法需要被代理
2.携带事务管理需要的一些属性信息。
二、@EnableTransactionManagement
利用TransactionManagementConfigurationSelector给容器中导入两个组件
AutoProxyRegistrar、ProxyTransactionManagementConfiguration。
2.1 AutoProxyRegistrar
这个组件最终向容器中注册了一个InfrastructureAdvisorAutoProxyCreator - 基础构建增强自动代理生成器。这个组件分别在Bean实例化前(略)、Bean初始化后执行相关操作。
在配置好注解驱动方式的事务管理之后,spring会在ioc容器创建一个BeanFactoryTransactionAttributeSourceAdvisor实例,这个实例可以看作是一个切点,在判断一个bean在初始化过程中是否需要创建代理对象时都需要验证该Advisor该是否是适用这个bean的切点。如果是,就需要创建代理对象,并且把BeanFactoryTransactionAttributeSourceAdvisor实例注入到代理对象中。
2.2 ProxyTransactionManagementConfiguration
它注册了⼀个组件BeanFactorytransactionAttributeSourceAdvisor,称为事务增强器,然后在这个事务增强器中又注入了两个组件:
属性解析器transactionAttributeSource 和 事务拦截器transactionInterceptor。
属性解析器的作⽤之⼀就是⽤来解析@Transaction注解
事务拦截器的拦截功能就是依靠TransactionInterceptor实现了MethodInterceptor接口,在invoke方法中调用了invokeWithinTransaction()方法:
这个方法获取了属性解析器和事务管理器,执行目标方法 :
如果异常,利用事务管理器执行回滚操作;
如果正常,利用事务管理器,提交事务。