【发布时间】:2011-09-10 06:40:03
【问题描述】:
我正在尝试在私有方法 java.net.AbstractSocketImpl.connectToAddress(..) 上设置切入点,并且我想使用加载时编织。这是我的测试代码:
public class Main {
public static void main(String args[]) throws Throwable {
new java.net.Socket("localhost", 10111);
}
}
这是我的特权方面:
privileged aspect PrivAspect {
before() : call(* java.net.AbstractPlainSocketImpl.connectToAddress(..)) {
System.out.println("It works");
}
}
这是 META-INF/aop.xml
<aspectj>
<aspects>
<aspect name="PrivAspect"/>
</aspects>
<weaver options="-verbose -Xset:weaveJavaPackages=true"/>
</aspectj>
这是我编译代码的方式:
$ javac Main.java
$ java -jar ../lib/aspectjtools-1.6.11.jar -source 6 -cp .:$CLASSPATH PrivAspect.aj
[warning] this affected type is not exposed to the weaver: java.net.AbstractPlainSocketImpl (needed for privileged access) [Xlint:typeNotExposedToWeaver]
/home/batto/work/ajtest/test/PrivAspect.aj:2 [warning] advice defined in PrivAspect has not been applied [Xlint:adviceDidNotMatch]
2 warnings
$ java -cp .:$CLASSPATH -javaagent:../lib/aspectjweaver-1.6.11.jar Main
最后一行抛出预期的“连接被拒绝”异常(端口已关闭)但没有调用建议。
有什么问题?
谢谢。
编辑:我知道调用了 java.net.AbstractPlainSocketImpl.connectToAddress(..)(我在 Eclipse 中调试了 Main)。
【问题讨论】: