4

研究了在运行时使用 CGLib、ASM、BCEL(方面)和 Javassist 向类添加字段....

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

也许这很正常?人们通常会创建代理并传递代理吗?

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

4

1 回答 1

2

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

在你的情况下,你可以,

  • 按照您的建议创建代理,但是代理需要是接口。
  • 创建一个具有附加字段的子类
  • 在类加载之前添加字段。
于 2012-08-06T12:24:40.313 回答