spring 事务 @EnableTransactionManagement原理


@EnableXXX原理:注解上有个XXXRegistrar,或通过XXXSelector引入XXXRegistrar,XXXRegistrar实现了 
ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,给容器注册XXXCreator。这个Creator实现了后置处理器, 
后置处理器在对象创建以后,包装对象,返回一个代理对象,代理对象执行方法利用拦截器链进行调用

* 1)、@EnableTransactionManagement * 利用TransactionManagementConfigurationSelector给容器中会导入组件 * 导入两个组件 * AutoProxyRegistrar * ProxyTransactionManagementConfiguration * 2)、AutoProxyRegistrar: * 给容器中注册一个 InfrastructureAdvisorAutoProxyCreator 组件; * 利用后置处理器机制在对象创建以后,包装对象,返回一个代理对象(增强器),代理对象执行方法利用拦截器链进行调用; * 3)、ProxyTransactionManagementConfiguration是个@Configuration * 1、给容器中注册事务增强器transactionAdvisor; * 1)、事务增强器要用事务注解的信息,AnnotationTransactionAttributeSource解析事务注解 * 2)、事务拦截器transactionInterceptor: * TransactionInterceptor;保存了事务属性信息,事务管理器; * TransactionInterceptor是一个 MethodInterceptor; * 在目标方法执行的时候; * 执行拦截器链; * 只有事务拦截器: * 1)、先获取事务相关的属性 * 2)、再获取PlatformTransactionManager,如果事先没有添加指定任何transactionmanger * 最终会从容器中按照类型获取一个PlatformTransactionManager; * 3)、执行目标方法 * 如果异常,获取到事务管理器,利用事务管理回滚操作; * 如果正常,利用事务管理器,提交事务


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM