查看使用CGLib,ASM,BCEL(方面)和Javassist在运行时向类添加字段...
只是为了让我直截了当,看起来这些字节码操纵器不会更新实际的类,而是允许用户只转储修改(如 CGLib 和 writeFile 方法)。 希望我能找到一个解决方案,(a)加载类(而不是使用BCEL进行输入流)和(b)更新类。
也许这很正常? 人们通常创建一个代理并传递代理吗?
我想做的是在将对象传递给查找具有特定注释的字段(不是属性)的框架之前添加一个字段(注意:不是通过 get/set 方法的属性)。 因此,"客户端"正在创建我的目标类,我想注入一个额外的字段。 使用 AOP 调用拦截我要在其中操作这些对象的服务层。
您可以使用入侵重新定义类。但是,一个常见的限制是您无法更改使用的字段。 这是因为创建对象后,您无法更改对象的内容(或向其添加内容)。
在您的情况下,您可以,
- 按照您的建议创建一个代理,但是代理必须是接口。
- 创建一个具有附加字段的子类
- 在加载类之前添加字段。