当前位置: 首页 > 知识库问答 >
问题:

需要在AspectJ项目中配置Spring AOP建议

赖浩荡
2023-03-14

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

然而,在一个特殊的情况下,我发现我需要围绕着Spring的相位来编织相位。更具体地说,我想包装一个Spring@Transactional。

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

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

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

共有1个答案

钱嘉致
2023-03-14

我的项目使用的是aspectj maven插件。如何配置pom/项目,使ajc忽略我的@方面,但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可能会带来更多的麻烦,并且可能会引入其他问题。让aspect和标准Sping aspect建议@事务方法应该不会有问题。如果我是你,我会坚持编译时编织,并在你的方面设置优先级,以便它首先运行。在您的方面中,您可以捕获异常并根据需要重试。

从AspectJ文档:

一条around通知通过调用procedure控制是否运行优先级较低的通知。继续调用将以下一个优先级运行通知,如果没有进一步的通知,则在连接点下运行计算。

之前的建议可以通过抛出异常来阻止优先级较低的建议运行。但是,如果它正常返回,则下一个优先级的建议或连接品脱下的计算(如果没有进一步的建议)将运行。

 类似资料:
  • 构建配置说明 开发者可以在  build.json 中配置不同的配置参数来改变项目的构建方式,具体配置参数如下: 属性 类型 默认值 描述 turnOffSourceMap boolean false 是否开启 sourceMap(目前支付宝 IDE 存在不准确的情况) constantDir string/array src/constant 静态资源(只能放在 src 目录下) disable

  • 我需要用IDE MyEclipse2015在我的codenameone项目中设置java 1.8。 我遵循了“https://www . codename one . com/blog/Java-8-support . html”中的指南,将项目构建路径设置为java1.8,编译器设置为java 1.8,build.xml javac源和目标设置为1.8。 还要将构建提示设置为java.versi

  • 本文向大家介绍SpringAOP中的注解配置详解,包括了SpringAOP中的注解配置详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringAOP中的注解配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 使用注解实现SpringAOP的功能: 例子: xml配置:注意给例子中使用的其他的类上面也使用注解 注意:<aop

  • 我想在我的jsf项目中使用spring security标记库,所以我对项目做了以下更改,但是我得到了这个异常: java.lang.IllegalStateExc的:ContainerBase.add子级:开始:org.apache.catalina.生命周期异常:java.lang.运行时异常:com.sun.faces.config.配置异常:源文档: jar: file:/C:/用户/om

  • 问题内容: 我想在Gradle项目中使用AspectJ(这不是Android项目,只是一个简单的Java应用程序)。 这是我的build.gradle的样子: 代码可以编译,但是该方面似乎没有被编织。有什么事吗 问题答案: 我已经为此苦苦挣扎了一段时间,所以这个配置我使用并且效果很好。 在您的配置中执行此操作。 在依赖项中,使用以下配置。如果您不使用spring fwk,则不需要Spring依赖项

  • 项目配置 项目配置 配置简介 CAT上项目名称:项目接入CAT后的唯一标识,来识别自己 事业部:项目所属事业部 产品线:项目所属产品线 负责人:项目负责人,该项不做为告警联系人 项目组邮件:项目负责人邮件,或项目组产品线邮件,多个邮箱由英文逗号分割,不要留有空格;作为发送告警邮件、微信的依据 项目组号码:项目负责人手机号;多个号码由英文逗号分隔,不要留有空格;作为发送告警短信的依据 机器分组配置