gpt4 book ai didi

java - 需要在 AspectJ 项目中配置 Spring AOP Advice

转载 作者:太空宇宙 更新时间:2023-11-04 06:40:12 26 4
gpt4 key购买 nike

我有一个使用 AspectJ 的 Spring 项目。在 99.9% 的情况下,使用 AspectJ (ajc) 来 CTW 我的方面按预期工作。

但是,在一种特定情况下,我发现我需要围绕 Spring 方面编织我的方面。更具体地说,我想包装一个 Spring @Transactional。

如果我使用 AspectJ ajc 来 CTW 我的建议,它将围绕任何定义为 @Transactional 的方法进行编织。相反,我想包装 Spring @Transactional 建议。基本上,我试图捕获事务中引发的任何错误,并在失败时重试事务。

我的问题是,通过在项目的其余部分中使用 ajc,它会自动将我的方面编织到我的类中,而不是允许 Spring 的 AOP 机制解释它并在运行时编织它。

我的项目正在使用aspectj-maven-plugin。如何配置我的 pom/项目,以便 ajc 忽略我的 @Aspect,但 Spring 仍然可以看到它?

最佳答案

My project is using the aspectj-maven-plugin. How do I configure my pom/project such that ajc ignores my @Aspect, but Spring still sees it?

不包含 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 可能会带来更多麻烦,而不是其值(value),并且可能会引入其他问题。让您的方面和标准 Sping 方面都建议 @Transactional 方法应该不是问题。如果我是你,我会坚持编译时编织和 set the precedence在你的方面,以便它首先运行。在您的方面,您可以捕获异常并根据需要重试。

来自 AspectJ 文档:

A piece of around advice controls whether advice of lower precedence will run by calling proceed. The call to proceed will run the advice with next precedence, or the computation under the join point if there is no further advice.

A piece of before advice can prevent advice of lower precedence from running by throwing an exception. If it returns normally, however, then the advice of the next precedence, or the computation under the join pint if there is no further advice, will run.

关于java - 需要在 AspectJ 项目中配置 Spring AOP Advice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24782704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com