声明式事务

* 声明式事务:
 * 
 * 环境搭建:
 * 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.执行目标方法
 *								如果异常,获取到事务管理器,利用事务管理器回滚操作;			
 * 								如果正常,利用事务管理器提交事务;
 * 
上一篇:Spring事务:@Transactional注解的一些记录


下一篇:spring成神之路第四十四篇:详解 spring 声明式事务(@Transactional)