0
我想在私有方法java.net.AbstractSocketImpl.connectToAddress(..)上設置切入點,我想使用加載時織入。這是我的測試代碼:AspectJ - 加載時織入,私有方法JRE類的加載時編織,特權方面和切入點
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
最後一行thro ws預計「連接被拒絕」異常(端口已關閉),但不會調用通知。
有什麼問題?
謝謝。編輯:我知道java.net.AbstractPlainSocketImpl.connectToAddress(..)被調用(我在Eclipse中調試主)。
我想在運行時編織,而不是在編譯時。 – batto 2011-06-08 11:19:59