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



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

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

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

最新更新