0

你能告诉我字节伙伴是否可能出现这种情况:

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

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

4

2 回答 2

0

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

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

于 2015-08-19T19:24:45.287 回答
0

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

这对于任何代码注入器或 java 代理 BUUUT 都应该是可行的,但这样做是错误的。还花费了您大量的开销而没有更好的结果。

于 2017-08-04T22:33:01.763 回答