2011-06-07 42 views
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中調試主)。

回答

相關問題