AspectJ的 ​​- 装载时织,特权方面和切入点在JRE类的私有方法

我试图设置切入点私有方法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中调试主)。

--------------解决方案-------------

这似乎是后编译时参照的INPATH(java.net.AbstractPlainSocketImpl)没有指定一个类编织。 有必要明确指定哪些.class / .jar文件是通过AspectJ被“织”。 查看更多细节在这里:http://www.eclipse.org/aspectj/doc/released/devguide/ajc-ref.html

分类:java的 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.149 (s). 10 q(s)