Bytebuddy - 在运行时重新定义类

时间:2015-08-18 19:44:55

标签: java bytecode proxy-classes byte-buddy

请告诉我这是否可能是字节伙伴的情况:

  1. 运行Java程序。
  2. 加载了具有大量属性的标准java POJO类。
  3. ByteBuddy - 在运行时修改每个类替换属性类型,例如int和Integer与MyIntegerMyInteger用于拦截此属性的设置。我不想使用setter,因为并不是必须为所有属性设置setter。
  4. 每次调用SomeClass.setSomeInt(1)都会调用MyInteger上定义的某些方法。
  5. 将所有属性移回原始版MyInteger - > intMyInteger - > Integer
  6. 基本上直接在属性上运行代理。

2 个答案:

答案 0 :(得分:0)

使用Byte Buddy(或我所知的任何高级代码生成库)都无法做到这一点。 Byte Buddy旨在实现二进制兼容的更改。如果更改了字段的类型,则需要更改访问此字段的所有代码。与更改类的私有实现相比,这需要更改类API的全局代码更改。

我建议你在你的类中添加访问器方法并拦截那些访问器。 IDE可以帮助您。此外,通过拦截这些访问者,您可以自由决定在拦截期间做什么。

答案 1 :(得分:0)

在运行时不应该有很多字段需要更改,如果是,我会建议使用更新程序exec的数据库存储。然后,您可以通过任何您喜欢的界面更改数据库,并且当轮询类重复时,它将从数据库中获取内容并为您完成所有设置。

这应该适用于任何代码注入器或java代理,BUUUT,它会做错的方式。同样也会花费你很多开销而没有更好的结果。