我正在从Spring 2.5.6迁移到3.2.5。 jar spring-aspects-3.2.5包含新方面JpaExceptionTranslatorAspect,它将标准JPA异常转换为Spring异常。 It seems to be a Roo-specific aspect。这个方面会自动编织到存储库中(使用@Repository注释)。因此,标准JPA异常不再被捕获并且应用程序被破坏。
如何排除JpaExceptionTranslatorAspect的编织?如果无法完成,还有其他解决方法吗?或者我错过了一些配置?
我正在使用AspectJ 1.7.4和AspectJ Maven插件1.4。
我已收集的内容:
但是,我想知道这些信息是否是最新的。
答案 0 :(得分:9)
首先,将aspectj-maven-plugin升级到1.5,并在插件配置中添加complianceLevel标记(否则默认情况下会尝试使用java 1.4兼容性进行编译)。 然后,您可以通过aspectj-maven-plugin的xmlConfigured属性指定排除项。此属性引用本地目录中的文件(即pom.xml所在的位置)
pom.xml例子:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.5</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<complianceLevel>${maven.compiler.target}</complianceLevel>
<xmlConfigured>myCtAspects.xml</xmlConfigured>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<showWeaveInfo>true</showWeaveInfo>
<weaveMainSourceFolder>true</weaveMainSourceFolder>
<proceedOnError>${maven.aspectj.failOnError}</proceedOnError>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<phase>process-resources</phase>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
然后在myCtAspects.xml文件中,您只需要明确指定所有需要的方面,包括Spring Aspects。在你的情况下:
<?xml version="1.0"?>
<aspectj>
<aspects>
<!-- Spring Aspects -->
<aspect name="org.springframework.beans.factory.aspectj.AbstractInterfaceDrivenDependencyInjectionAspect"/>
<aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
<aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>
<!-- Your Application Aspects -->
</aspects>
</aspectj>
答案 1 :(得分:0)
请尝试使用aop-autoproxy include属性和一些反转正则表达式(类似^((?! JpaExceptionTranslatorAspect).)*$
)。