如何记录/监视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