如何禁用Spring';s JPAEExceptionTranslatorAspect

如何禁用Spring';s JPAEExceptionTranslatorAspect,spring,aspectj,Spring,Aspectj,我正在从Spring2.5.6迁移到3.2.5。jar spring-aspects-3.2.5包含新的aspect JPAEExceptionTranslatorAspect,它将标准JPA异常转换为spring异常。此特性自动编织到存储库中(用@Repository注释)。因此,标准JPA异常不再被捕获,应用程序被破坏 如何将JPAEExceptionTranslatorAspect排除在编织之外?如果做不到,还有其他解决办法吗?还是我遗漏了一些配置 我正在使用AspectJ 1.7.4和A

我正在从Spring2.5.6迁移到3.2.5。jar spring-aspects-3.2.5包含新的aspect JPAEExceptionTranslatorAspect,它将标准JPA异常转换为spring异常。此特性自动编织到存储库中(用@Repository注释)。因此,标准JPA异常不再被捕获,应用程序被破坏

如何将JPAEExceptionTranslatorAspect排除在编织之外?如果做不到,还有其他解决办法吗?还是我遗漏了一些配置

我正在使用AspectJ 1.7.4和AspectJ Maven插件1.4

我已经收集到:


但是,我想知道这些信息是否是最新的。

请尝试使用aop autoproxy的include proprety和一些反转regexp(类似于
^((?!JPAEExceptionTranslatorAspect)。*$

首先,将aspectj maven插件升级到1.5,并在插件的配置中添加complianceLevel标记(否则,默认情况下,它将尝试使用java 1.4 compliance进行编译)。 然后,您可以通过aspectj maven插件的xmlConfigured属性指定排除。该属性引用本地目录中的文件(即pom.xml所在的位置)

pom.xml示例:


org.codehaus.mojo
aspectj maven插件
1.5
${maven.compiler.source}
${maven.compiler.target}
${maven.compiler.target}
myCtAspects.xml
org.springframework
春季方面
真的
真的
${maven.aspectj.failOnError}
编译
过程资源
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjtools
${aspectj.version}
然后在myCtAspects.xml文件中,您只需显式指定所有需要的方面,包括Spring方面。在您的情况下:



您是否尝试过使用@Component而不是@Repository?如果您想删除异常转换,这是最简单的方法。这将是一个简单的解决方法,谢谢您。但是,可能还需要一些其他方面,并且基于@Repository的存在。我不知道删除它可能会产生的所有后果。不过,这是一个想法,也是一个挑战我会试一试。事实上,JPAEExceptionTranslatorAspect是独立于@Repository编制的,正如我在问题中的一个链接中所提到的。尽管如此,我还是尝试了,这是真的。如果Spring负责AOP的东西,那就行了。在我的例子中,它是AspectJ,带有编译时编织。如果是这样,你应该使用“排除”aspectj maven插件配置上的配置。这只适用于作为编译模块一部分的方面。它不适用于驻留在外部库中的方面。Arg,实际上是这样说的,但我错过了它,因为aspectj maven插件当时不支持它。谢谢。我尝试了,似乎还可以:没有JpaExcep在编译的codeWait中,它起作用了,但它禁用了所有方面^^。似乎我需要声明我想在XML中使用的每个方面。你是正确的。有必要列出所有需要的方面:spring和应用程序方面。我更新了上面的示例。这个答案对我有帮助。我对AspectJ了解很多,但
-xmlConfigured
对于Ajc完全没有文档记录。因此,我刚刚为它创建了一个。