首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Aspectj从方法执行切入点中排除字段执行

如何使用Aspectj从方法执行切入点中排除字段执行
EN

Stack Overflow用户
提问于 2013-09-30 12:22:22
回答 1查看 596关注 0票数 0

我想捕获所有的方法执行。因此,我在下面定义了切入点,并尝试使用get/set切入点指示器排除字段访问,但它不起作用。

有什么建议吗?非常感谢。

代码语言:javascript
复制
 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。

代码语言:javascript
复制
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

对应的源码如下。

代码语言:javascript
复制
    ....
    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。

EN

回答 1

Stack Overflow用户

发布于 2013-12-06 20:37:41

这些是合成方法的执行,它们是由编译器创建的,因为,我想,从您写下的内容来看,run()方法位于ImageListManager.的内部类中它们负责检索第一个和第二个已定义字段的值(假设从访问后的$0和$1开始)。

如果您想要删除放入切入点和-子句中执行,请使用:

代码语言:javascript
复制
!execution(* *.access$*(..))

希望能有所帮助,

达里奥。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19086421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档