zoukankan      html  css  js  c++  java
  • spring-事务实现原理

    spring事务的实现原理:aop。

    aop的两种实现方式:

    1.动态代理:

       事务方法与调用方法不能在同一个类中,否则事务不生效。解决方案,自己注入自己(实质注入的是代理类)。

       实现方式:jdk动态代理(只能代理接口)  或者  cglib动态代理(代理接口或者类),cglib是基于字节码技术的,使用的是ASM。asm是一个java字节码操纵框架,它能被用来动态生成类或者增强既有类的功能。ASM可以直接产生二进制class文件,也可以在类被加载入JVM之前动态改变类行为。

    2.编译时,更改字节码文件。解决方案,使用额外的编译插件。以aspect为例:

      (1)引入jar包

    <!-- aspectj-maven-plugin 需要的jar -->
    <dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.8.7</version>
    </dependency>
    <dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
    </dependency>
    <!-- aspectj-maven-plugin 需要的jar结束 -->

    (2)使用插件
    <build>
    <plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
    <execution>
    <goals>
    <goal>compile</goal>
    <goal>test-compile</goal>
    </goals>
    </execution>
    </executions>
    <configuration>
    <source>${java_source_version}</source>
    <target>${java_target_version}</target>
    <complianceLevel>${java_target_version}</complianceLevel>
    <encoding>UTF-8</encoding>
    <aspectLibraries>
    <aspectLibrary>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    </aspectLibrary>
    </aspectLibraries>
    </configuration>
    </plugin>
    </plugins>
    </build>

       

  • 相关阅读:
    Unity 网络通信以及buffer优化
    Unity 滑动列表ScrollRect制作
    Unity中一些辅助工具类
    一个欠揍的广告语
    翻译:使用 Asp.net mvc 15 分钟创建 Movie 数据库应用程序
    [转]如何查找.NET程序内存不断上涨的原因(CLRProfiler)
    [转载]SQL语句的解析过程
    [转]C#汉字转换拼音技术详解(高性能)
    adb devices 找不到设备的解决方法
    JS中对象object的复制
  • 原文地址:https://www.cnblogs.com/DengGao/p/5474325.html
Copyright © 2011-2022 走看看