【发布时间】:2015-11-20 16:55:01
【问题描述】:
有谁知道是否有任何方法可以使用 Javassits 拦截被访问类上的字段访问?
public class Original{
public int field;
}
public class User {
Original o;
...
public int query(){
return o.field;
}
public void set(){
o.field=3;
}
}
我想要的是,每当另一个类从任何原始实例访问该字段时,它都会运行一些额外的代码(例如System.out.println("Reading field");)
我知道扩展类 javassist.expr.ExprEditor 并实现方法void edit(FieldAccess fa),我可以替换我想要的任何其他代码的字段访问,但在访问类上。
这需要修改访问该字段的任何类。在我们的示例中,用户类 a 将所有读取访问替换为 System.out.println(...);XXX=o.field,并将所有写入访问替换为 System.out.println(...);o.field=XXX
我想做的是将常规类实例转换为代理,以便任何字段访问都会触发方法执行。可行吗?对可能的子类有影响吗?
提前致谢!
【问题讨论】: