需要在AspectJ项目中配置Spring AOP建议
我有一个使用AspectJ的Spring项目。 在99.9%的案例中,对CTW使用AspectJ(ajc)我的方面正在按预期工作。
然而,在一个特定的情况下,我发现我需要围绕Spring的方面来编织我的方面。 更具体地说,我想包装一个Spring @Transactional。
如果我将AspectJ ajc用于CTW我的建议,它将围绕定义为@Transactional的任何方法编织它。 相反,我想包装Spring @Transactional的建议。 基本上,我试图捕获在事务中引发的任何错误,并在失败时重试事务。
我的问题是,通过在项目的其余部分中已经使用ajc,它会自动将我的方面编织到我的类中,而不是让Spring的AOP机制解释它并在运行时编织它。
我的项目使用aspectj-maven-plugin
。 我如何配置我的pom /项目,使ajc忽略我的@Aspect,但Spring仍然看到它?
我的项目使用aspectj-maven-plugin。 我如何配置我的pom /项目,使ajc忽略我的@Aspect,但Spring仍然看到它?
不要包含Spring方面库。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.5</version>
<configuration>
<complianceLevel>${project.javaVersion}</complianceLevel>
<encoding>UTF-8</encoding>
<aspectLibraries>
<!-- remove this -->
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
同时编译时间和基于代理的AOP的编译时间可能比它的价值更麻烦,并且可能会引入其他问题。 让您的方面和标准Sping方面建议@Transactional方法应该不成问题。 如果我是你,我会坚持编译时编织并设置优先级在你的方面,以便它首先运行。 在你的方面,你可以捕获异常并根据需要重试。
从AspectJ文档:
一条around建议控制着通过调用proceed来运行较低优先级的通知。 继续的调用将运行下一个优先级的建议,或者如果没有进一步的建议,则在连接点下执行计算。
之前的一条建议可以通过抛出一个异常来防止运行较低优先级的建议。 但是,如果它正常返回,那么将运行下一个优先级的建议,或者如果没有进一步的建议,则在连接点下进行计算。
链接地址: http://www.djcxy.com/p/25405.html上一篇: Need to configure a Spring AOP Advice within an AspectJ project