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>

       

  • 相关阅读:
    微信小程序中的组件使用1
    小程序中的请求封装
    路由
    nodejs静态web服务
    跨端开发小程序
    非阻塞I/O事件驱动
    Node文件模块
    提炼游戏引擎系列:初步设计引擎
    提炼游戏引擎系列:开篇介绍
    发布HTML5 2D游戏引擎YEngine2D
  • 原文地址:https://www.cnblogs.com/DengGao/p/5474325.html
Copyright © 2011-2022 走看看