如何记录/监控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?或者有没有办法达到它的INStrument或动态代理
答案 0 :(得分: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();
}
}
});
答案 1 :(得分:0)
我认为AOP是你需要的。阅读例如这个 http://www.javacodegeeks.com/2012/06/simple-introduction-to-aop.html