* 声明式事务:
*
* 环境搭建:
* 1、导入相关依赖
* 数据源、数据库驱动、Spring-jdbc模块
* 2.配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
* 3.给方法加上@Transational 表示当前方法是事务方法;作用是当方法内异常时,进行回滚;
* 4. @EnableTransactionManagement 开启基于注解的事务管理功能
* 5.配置事务管理器来控制事务;
* 事务管理器加在容器中;
*
* 原理:
* 1.@EnableTransactionManagement 默认是AdviceMode.PROXY
* 利用TransactionManagementConfigurationSelector给容器导入组件
* 导入两个组件:AutoProxyRegistrar、ProxyTransactionManagementConfiguration
* 2.AutoProxyRegistrar:是ImportBeanDefinitionRegistrar,由以前的@Import用法,知道这是手动往容器中注册组件
* 给容器中注册一个InfrastructureAdvisorAutoProxyCreator组件;
* 和切面的AnnotationAwareAspectJAutoProxyCreator作用一样,也是会执行处理器进行包装
*
*
* 3.ProxyTransactionManagementConfiguration做了什么?
* 1.给容器中注册事务增强器
* 1.增强器要用到@Transactional中的信息(在@Transactional(xxx))
* 用到AnnotationTransactionAttributeSource解析事务注解
*
* 2.事务拦截器
* TransactionInterceptor:保存了事务的属性信息,事务管理器;
* 他是一个MethodInterceptor;
* 在目标方法执行的时候,
* 执行拦截器链
* 1.先获取事务相关属性
* 2.再获取PlatformTransacyionManager ,如果事先没有指定任何TransactionManager(可在@Transactional中配置)
* 最终会从容器中按照类型获取一个TransactionManager【PlatformTransacyionManager】
* 3.执行目标方法
* 如果异常,获取到事务管理器,利用事务管理器回滚操作;
* 如果正常,利用事务管理器提交事务;
*