我想捕获所有的方法执行。因此,我在下面定义了切入点,并尝试使用get/set切入点指示器排除字段访问,但它不起作用。
有什么建议吗?非常感谢。
pointcut funcExecutionPointcut():execution(* *.*(..)) && !get(* *.*) && !set(* *.*);
before():funcExecutionPointcut() {
//log some info.
Signature sig = thisJoinPointStaticPart.getSignature();
String className = "";
if (thisJoinPoint.getThis() != null)
className = thisJoinPoint.getThis().getClass().getName();
mylogger.log(Level.INFO,"Entering [(" + className + ")" + sig.toShortString() + "] @" + line + "@" +file);
}问题是输出显示类的字段也被切入点击中,如下所示的log。
2013-09-30 11:39:11:18 Thread-447 INFO AspectJFuncTracing - Entering [()ImageListManager.access$0(..)] @48@ImageListManager.java
2013-09-30 11:39:11:19 Thread-447 INFO AspectJFuncTracing - Entering [()ImageListManager.access$1(..)] @56@ImageListManager.java对应的源码如下。
....
public void run() {
while (mThreadBeing) {
try {
sleep(sleeptime);
} catch (Exception e) {
e.printStackTrace();
}
sleeptime = 200;
if (!mThreadBeing) {
break;
}
if (mScrolling) {
continue;
}
...ImageListManager.access$0指向类字段mThreadBeing,而ImageListManager.access$1指向类字段mScrolling。
发布于 2013-12-06 20:37:41
这些是合成方法的执行,它们是由编译器创建的,因为,我想,从您写下的内容来看,run()方法位于ImageListManager.的内部类中它们负责检索第一个和第二个已定义字段的值(假设从访问后的$0和$1开始)。
如果您想要删除放入切入点和-子句中执行,请使用:
!execution(* *.access$*(..))希望能有所帮助,
达里奥。
https://stackoverflow.com/questions/19086421
复制相似问题