spring事务的实现原理:aop。
aop的两种实现方式:
1.动态代理:
事务方法与调用方法不能在同一个类中,否则事务不生效。解决方案,自己注入自己(实质注入的是代理类)。
实现方式:jdk动态代理(只能代理接口) 或者 cglib动态代理(代理接口或者类)
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>
时间: 2024-10-31 11:19:14