繁体   English   中英

Bytebuddy-运行时中的类重新定义

[英]Bytebuddy - class redefinition in runtime

您能否告诉我,如果使用字节预算,这是可能的情况:

  1. Java程序运行。
  2. 加载具有许多属性的标准Java POJO类。
  3. ByteBuddy在运行时修改每个类,以MyInteger替换属性类型,例如int和Integer。 MyInteger可以拦截此属性的设置。 我不想使用设置器,因为并非所有属性都必须具有设置器。
  4. SomeClass.setSomeInt(1)每次调用都将调用MyInteger上定义的某个方法。
  5. 将所有属性删除回原始的MyInteger > intMyInteger > Integer

基本上,运行时代理直接基于属性。

使用Byte Buddy(或我所知道的任何高级代码生成库)是不可能的。 字节伙伴旨在实现二进制兼容的更改。 如果您更改了字段的类型,则需要更改所有访问该字段的代码。 与更改类的私有实现相比,由于更改了类的API,这将需要全局代码更改。

我建议您将访问器方法添加到类中并拦截这些访问器。 IDE可以帮助您。 另外,通过拦截这些访问器,您可以自由决定拦截期间的操作。

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

这应该对任何代码注入器或Java代理BUUUT都可行,否则这样做是错误的。 也要花费大量的开销才能获得更好的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM