AspectJ 建议已定义但未应用
AspectJ Advice Defined but not applied
所有,我试图找到解决这个问题的方法,但不知何故它让我感到困惑。我在实验基础上尝试检测 H2 驱动程序以打印出一些痕迹。方面如下:
pointcut getMajorVersion_pointcut() :
call(int org.h2.Driver.getMajorVersion());
before() : getMajorVersion_pointcut() {
System.out.println("Before Advice:: driver executed");
}
这非常有效,我得到了输出 "Before Advice:: driver executed"。
但是,其他的建议是有问题的:
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 正在标记 "Advice defined in ... has not been applied"
截图如下:
从左侧面板可以看出,H2驱动有带签名的方法。谁能指出我正确的方向。
调用Driver.acceptsURL(String)
的代码在哪里?它必须在您编织的(应用程序)代码中的某个位置。如果调用是从 H2 库内部进行的,它不会被拦截,因为它在 AspectJ 的控制之外进行编码。如果你想改变这种情况,你需要
- 将库放在 inpath 上并编织 H2 classes,创建库的编织版本并在运行时使用它而不是原始版本,
- 或使用加载时编织 (LTW) 并在 class 加载期间动态编织 H2 库。
所有,我试图找到解决这个问题的方法,但不知何故它让我感到困惑。我在实验基础上尝试检测 H2 驱动程序以打印出一些痕迹。方面如下:
pointcut getMajorVersion_pointcut() :
call(int org.h2.Driver.getMajorVersion());
before() : getMajorVersion_pointcut() {
System.out.println("Before Advice:: driver executed");
}
这非常有效,我得到了输出 "Before Advice:: driver executed"。
但是,其他的建议是有问题的:
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 正在标记 "Advice defined in ... has not been applied"
截图如下:
从左侧面板可以看出,H2驱动有带签名的方法。谁能指出我正确的方向。
调用Driver.acceptsURL(String)
的代码在哪里?它必须在您编织的(应用程序)代码中的某个位置。如果调用是从 H2 库内部进行的,它不会被拦截,因为它在 AspectJ 的控制之外进行编码。如果你想改变这种情况,你需要
- 将库放在 inpath 上并编织 H2 classes,创建库的编织版本并在运行时使用它而不是原始版本,
- 或使用加载时编织 (LTW) 并在 class 加载期间动态编织 H2 库。