1.bean.xml <tx:annotation-driven/> 开启注解式事务
2.或@EnableTransactionManagement 开启注解的事务管理
3.注册事务管理器在容器中
@Bean
public PlatformTransactionManager transactionManager(){
return new DataSourceTransactionManager(dataSource());//传入数据源
}
======================以上是事务配置思路===========================
1)@EnableTransactionManagement原理(和切面一样)
TransactionManagementConfigurationSelector给容器导入两个组件AutoProxyRegistrar和ProxyTransactionManagementConfiguration
1.1)AutoProxyRegistrar给容器注册InfrastructureAdvisorAutoProxyCreator组件(也是后置处理器)
利用后置处理器机制在对象创建后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链执行
1.2) ProxyTransactionManagementConfiguration做了什么?
1.2.1)给容器注册事务增强器:
1.2.1.1)事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解
1.2.1.2)事务拦截器:TransactionInterceptor:保存了事务属性信息,事务管理器,是一个MethodInterceptor
1.2.1.3)MethodInterceptor在目标方法执行的时候,执行拦截器链(事务拦截器)
1.2.1.3)事务拦截器:
1)先获取事务相关的属性
2)再获取TransactionManager
3)执行目标方法,如果异常,利用事务管理器并回滚操作;如果正常,利用事务管理器提交