• Spring 事物Transaction


     日常开发中Spring 为我们提供了两种事物的定义方式  

        XML 配置 方式 :这种方式配置起来比较麻烦,但后期比较好进行维护

        注解方式:配置起来比较方便,也是日常开发常用的;

    我们这里进行第二种注解的形式的说明:如下是spring 注解开发的配置

        <!-- 事务管理器 -->
        <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref ="dataSource"/>
        </bean>
    
        <!-- 使用注解方式定义事务 -->
        <tx:annotation-driven transaction-manager="transactionManager" />

    接下来我们围绕着如下几个问题进行Spring 事物的展开:

    1.<tx:annotation-driven transaction-manager="transactionManager" /> 进行了哪些操作
    2.如何进行匹配哪些类需要增强并生成代理
    3.事物的传播机制

    第一个问题:  <tx:annotation-driven transaction-manager="transactionManager" /> 进行了哪些操作

      自定义标签解析:org.springframework.transaction.config.TxNamespaceHandler

      解析: 

       注册相关配置类

     向事物拦截器中注册事物管理器的属性: 

     至此,已经注册了 InfrastructureAdvisorAutoProxyCreator ,AnnotationTransactionAttributeSource,TransactionInterceptor ,BeanFactoryTransactionAttributeSourceAdvisor

     这四个类;这四个类的作用,我们后面就能看出来;

      第二个问题: 如何进行匹配哪些类需要增强并生成代理?

      这个问题,需要看我们在注册的时候注册的 InfrastructureAdvisorAutoProxyCreator 类 代理生成器了,我们看它的类结构 有实现 BeanPostProcessor 接口

      这个接口的作用以及调用实际,请看我上一篇文章;

      我们直奔主题看  warpIfNecessary(..)方法

        点击进去:

      

      往下面点,会进入canApply 方法: 

       getTransactionAttributeSource() 就是得到我们第一步装配的AnnotationTransactionAttributeSource 是用来获取事物配置的;

        接下来就是真正的校验方法了: 

      

         解析方法上的注解,类上也一样 

        发现注解,解析注解属性

  • 相关阅读:
    为什么数据库连接很消耗资源 转
    在Eclipse中编写servlet时出现"The import javax.servlet cannot be resolved" 问题解决办法
    multipart/form-data post 方法提交表单,后台获取不到数据
    java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
    Eclipse/myEclipse 代码提示/自动提示/自动完成设置(转)
    PL/SQL破解方法(不需要注册码)
    Java
    tomcat开发环境配置
    文件操作权限
    Java版office文档在线预览
  • 原文地址:https://www.cnblogs.com/iscys/p/10527764.html
Copyright © 2020-2023  润新知