是否可以使用AspectJ在本机方法调用上设置切入点?我尝试了以下方面:
public aspect EmailAspect {
pointcut conn() : call(* java.net.PlainSocketImpl.socketConnect(..));
before() : conn() {
System.out.println("Connecting");
}
}
但它不起作用。我也没有通过谷歌搜索找到太多相关信息(除了这个http://blog.jayway.com/2007/02/16/static-mock-using-aspectj,但是不清楚它是否可能以及如何做到这一点。)
我试图在Eclipse中调试我的测试代码(只连接到某个TCP localhost端口),eclipse在socketConnect()断点处停止。
谢谢。
更新
这可能是原因:
AspectJ - Load-time weaving, privileged aspect and pointcut on private method of JRE class
答案 0 :(得分:2)
PlainSocketImpl在JDK提供的jar中,对吗?您可能会发现weaving into jars有用的问题。显然,在你编织你的方面之后,你需要记住使用编织罐而不是原始罐。
答案 1 :(得分:1)
如果this e-mail为真,则一旦将方法声明为原生方法,Java将编写直接跳转到底层C ++ / C机器代码的字节码。这意味着无论是编译时间,编译后时间还是加载时编织,都无法拦截AspectJ。