繁体   English   中英

如何记录/监视Java字段分配操作

[英]how to record/monitor java field assignment operation

如何记录/监视Java字段分配操作; 例如,我想在赋值操作之前或之后添加一些功能;

原始代码:

class Test{
 public String name;

 public void operation{
             .... some code ...
         name="stackoverflow";
            .... some code ...
  }
}

更改代码后:

class Test{
 public String name;
 public void operation{
          .... some code ...
      [[ my instrument code ]] 
         name="stackoverflow";
      [[ my instrument code ]]
           .... some code ...
  }
}

NOTE:我想在每个提交的任务行之前或之后进行检测; 因此无法手动指出哪条线应该是乐器

有可能使用JAVA DEBUG INTERFACE吗? 或有什么方法可以达到它?仪器或动态代理

您可以使用javassist做到这一点。 适用于字段,但不适用于数组。 我在快速序列化结构仿真中做了类似的事情:

method.instrument( new ExprEditor() {
                        @Override
                        public void edit(FieldAccess f) throws CannotCompileException {
                            try {
                                if ( ! f.isStatic() ) {
                                    CtClass type = null;
                                    type = f.getField().getType();
                                    FSTClazzInfo.FSTFieldInfo fieldInfo = clInfo.getFieldInfo(f.getFieldName(), null);
                                    if ( fieldInfo == null ) {
                                        return;
                                    }
                                    if ( f.isReader() ) {
                                        structGen.defineStructReadAccess(f, type, fieldInfo);
                                    } else if ( f.isWriter() ) {
                                        structGen.defineStructWriteAccess(f, type, fieldInfo);
                                    }
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });

来自https://code.google.com/p/fast-serialization/source/browse/trunk/src/main/java/de/ruedigermoeller/heapoff/structs/unsafeimpl/FSTStructFactory.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM