向Java类添加字段

时间:2012-08-06 12:19:15

标签: java bytecode javassist cglib bcel

使用CGLib,ASM,BCEL(aspect)和Javassist查看在运行时向类添加字段....

为了让我的头脑直白,看起来这些字节码操纵器不会更新实际的类而是允许用户只转储修改(就像使用CGLib和writeFile方法)。希望我能找到一个解决方案:(a)加载类(而不是用BCEL做一个InputStream)和(b)更新类。

也许这是正常的?人们通常会创建一个代理并传递代理吗?

我想要做的是在将对象传递给查找具有特定注释的字段(而不是属性)的框架之前添加字段(注意:不是通过get / set方法的属性)。所以“客户”正在创建我想要注入额外字段的目标类。拦截AOP会调用我想操纵这些对象的服务层。

1 个答案:

答案 0 :(得分:2)

您可以使用Intrumentation重新定义类。但是,常见的限制是您无法更改使用的字段。这是因为一旦创建对象(或添加到对象),您就无法更改它的内容。

在你的情况下,你可以,

  • 按照您的建议创建代理,但代理需要是接口。
  • 创建一个具有附加字段的子类
  • 在加载类之前添加字段。