gpt4 book ai didi

java - 在运行时修改库类 - java/maven

转载 作者:行者123 更新时间:2023-11-30 02:20:34 25 4
gpt4 key购买 nike

我正在开发一个 Maven 插件,我需要修改外部 jar 的一个类(在 maven 执行期间使用),以添加:

  • 此类的新字段
  • 字段的 setter/getter
  • 现有 setter 填充字段的一些行为

库代码应该使用我的"new"类,并且我希望能够使用 getter 来检索一些附加信息。

此类的实例是在库代码中创建的(我不是在代码中创建它们,我只需要访问它们)。类(class)为非最终公开课。

您知道这是否可行以及最好的方法是什么?可以用 ByteBuddy 来做吗?

编辑:我无法包装该类,因为它没有在我自己的代码中实例化,让我详细说明一下。

有一个名为“Parser”的库类,它实例化并填充一些“Element”实例。我的代码如下所示:

List<library.Element> elements = new library.Parser(file).parse();

Parser.parse() 方法对每个元素调用“Element.setProperties(List properties)”。我希望能够丰富 setProperties 方法来存储原始属性列表(否则会丢失)

谢谢朱利奥

最佳答案

最后我设法通过 byte-buddy 获得了想要的结果(我不知道这是否是最好的解决方案,但它有效):

  1. 仪器库类 (library.Element) 使用“rebase”策略将“setProperties”方法调用委托(delegate)给拦截器。

注意:当library.Element.class尚未加载时,这必须作为maven插件执行的第一条指令来完成(我不想使用JVM代理)

  • 将上述拦截器定义为一个类,该类将原始“properties”值存储在全局映射中(键=对象的身份哈希码,值=属性),然后调用库的原始“setProperties”方法.元素

  • 更改我的代码以从 map 获取属性,而不是library.Element getter(我已经有此类的包装器)。

  • 如果有人感兴趣,我可以展示一些代码。

    关于java - 在运行时修改库类 - java/maven,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973984/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com