AspectJ - 本机方法调用的切入点

时间:2011-06-07 16:17:31

标签: java aop native aspectj

是否可以使用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

2 个答案:

答案 0 :(得分:2)

PlainSocketImpl在JDK提供的jar中,对吗?您可能会发现weaving into jars有用的问题。显然,在你编织你的方面之后,你需要记住使用编织罐而不是原始罐。

答案 1 :(得分:1)

如果this e-mail为真,则一旦将方法声明为原生方法,Java将编写直接跳转到底层C ++ / C机器代码的字节码。这意味着无论是编译时间,编译后时间还是加载时编织,都无法拦截AspectJ。