0

如何记录/监控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 调试接口?或者有什么方法可以达到它仪器或动态代理

4

2 回答 2

1

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

于 2013-10-30T08:29:40.750 回答
0

我认为AOP是你需要的。阅读例如这个 http://www.javacodegeeks.com/2012/06/simple-introduction-to-aop.html

于 2013-10-30T08:20:01.867 回答