AspectJ建议已定义但未应用

时间:2015-01-02 13:28:14

标签: aspectj

所有,我试图找到一个解决方案,但不知何故它是在跟我说话。我试验性地试图用H2驱动程序打印出一些痕迹。方面如下:

pointcut getMajorVersion_pointcut() :
    call(int org.h2.Driver.getMajorVersion());

before() : getMajorVersion_pointcut() {
    System.out.println("Before Advice:: driver executed");
}

这很有效,我得到输出“在Advice :: driver执行之前”。

然而,其他建议是提出问题:

pointcut accept_pointcut(String url) :
    call(boolean org.h2.Driver.acceptsURL(String)) && args(url);

before(String url) : accept_pointcut(url) {
    System.out.println(url);
}

Eclipse正在标记“在...中定义的建议尚未应用”

截图如下:

enter image description here

从左侧面板中可以看出,H2驱动程序具有带签名的方法。任何人都可以指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

调用Driver.acceptsURL(String)的代码在哪里?它必须在您的编织(应用程序)代码中的某个位置。如果调用是在H2库中进行的,那么它将不会被截获,因为它的代码不在AspectJ的控制之内。如果你想改变这种情况,你需要

  • 将库放在 inpath 中并编织H2类,创建库的编织版本,并在运行时使用它而不是原始库,
  • 或使用加载时间编织(LTW)并在类加载期间动态编织H2库。