【问题标题】:Debugging aspects with intellij使用 intellij 调试方面
【发布时间】:2015-07-09 01:42:52
【问题描述】:

我正在尝试使用 AspectJ,发现 intellij 似乎并没有进入 @Around 方面。例如:

@Retention(RetentionPolicy.RUNTIME)
public @interface Test{}

@Aspect
public class TestAspect {
    @Around("execution(@aspects.Test * *(..))")
    public void around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("start1");

        point.proceed();

        System.out.println("end");
    }
}

@Data
public class Library {
    @Test
    public void forceError() {
        System.out.println("running");
    }

    private String foo;
}

虽然我可以编译并查看我的 cmets 在单元测试中运行,但我无法调试方面。

我已经尝试过基于方面注释,并使用带有 intellij 的 aspectJ .aj 文件来尝试获取 Around 方面进行调试。

【问题讨论】:

  • 使用适当的@Retention(例如@Retention(RetentionPolicy.RUNTIME))注释您的注释
  • 我的本地确实有这个,intellij 似乎不在乎。
  • 您的示例适用于 Spring AOP。您能否发布一个完整的示例,说明您如何使用 Library 实例?
  • SpringAOP 不是一回事,据我了解。那将使用弹簧工厂并使用基于代理的“方面”,这与字节码编织不同。我不想使用 spring,因为我的下游项目没有使用 spring,所以它对我来说效果不佳

标签: java intellij-idea


【解决方案1】:

我也有同样的问题。
如果我使用 gradle 脚本运行主类(运行应用程序插件的任务,即 gradle clean build run -x test),我的 aspectj 应用程序可以工作,但是如果我通过右键单击 Debug 'MyApp.main()' 来调试应用程序intellij idea 的上下文菜单,则 aop 将不起作用。

我找到了解决方案:设置 -> 构建,执行,部署 -> 构建工具 -> Gradle -> Runner -> 勾选 Delegate IDE build/run actions to gradle 选项,然后尝试调试右击intellij idea上下文菜单的Debug选项,查看结果。

这个方案只适用于gradle,我没有用maven试过。

【讨论】:

  • 它不适用于纯 AspectJ 的 maven,没有 Spring AOP
猜你喜欢
  • 2013-07-06
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2016-07-01
  • 1970-01-01
相关资源
最近更新 更多