zoukankan      html  css  js  c++  java
  • spring注解(3)

    /**
    * 声明式事务:
    *
    * 环境搭建:
    * 1、导入相关依赖
    *      数据源、数据库驱动、Spring-jdbc模块
    * 2、配置数据源、JdbcTemplate(Spring提供的简化数据库操作的工具)操作数据
    * 3、给方法上标注 @Transactional 表示当前方法是一个事务方法;
    * 4、 @EnableTransactionManagement 开启基于注解的事务管理功能;
    *    @EnableXXX
    * 5、配置事务管理器来控制事务;
    *    @Bean
    *    public PlatformTransactionManager transactionManager()

                     

                   

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

  • 相关阅读:
    nexus3.x Liunx私库安装教程 (亲测有用)
    nexus 3.x下载 3.18.1(maven 私服)
    halo项目源码本地部署解决方案
    gradle的安装配置
    raw.githubusercontent.com 访问不了
    springboot使用quartz解决调用不到spring注入service的问题
    Linux在不能使用yum的环境下安装pgsql(公司内网)
    idea 里面的maven依赖下载不了,以及mabtis依赖包错误
    关于oracle 数据库效率的优化
    关于oracle 不常用的job 运行时间设置
  • 原文地址:https://www.cnblogs.com/doyi111/p/12403961.html
Copyright © 2011-2022 走看看