前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >想修改第三方库的方法?我来教你

想修改第三方库的方法?我来教你

作者头像
用户10136162
发布2024-06-23 11:27:51
780
发布2024-06-23 11:27:51
举报
文章被收录于专栏:Eliauk的小窝Eliauk的小窝

当业务中被第三方库的一些方法限制时,我们可以通过修改第三方库的方法实现来满足我们的需求 本文使用了byte-buddy[1]参考资料

1、场景

es用Query.Builder 构建条件的时候,查询字段太长了 被截断了 断点图如下

造成这种方法的原因 通过查阅源码发现他重写了toString方法,当构建的参数过长是就会截断

最后拼接…

所以造成了dsl截断 但是这个需求是必须要做的,我们可以修改这个maxToStringLength的返回值值来解决这个问题

2、如何修改?

上边只是一种场景,下边如何修改举例,就不使用公司项目是,我们从stream-query中选一个方法来修改

我们之间修改这个方法的内容,让他直接返回一个我们想要的值

2.1、引入byte-buddy

代码语言:javascript
复制
<dependency>
    <groupId>net.bytebuddy</groupId>
    <artifactId>byte-buddy</artifactId>
    <version>1.14.12</version>
</dependency>
<dependency>
    <groupId>net.bytebuddy</groupId>
    <artifactId>byte-buddy-agent</artifactId>
    <version>1.14.11</version>
</dependency>

2.2、代码实现

查看代码测试

代码语言:javascript
复制
/**
 * 主函数,用于演示使用ByteBuddy动态修改类的行为。
 * @param args 命令行参数,本例中未使用。
 */
public static void main(String[] args) {

    // 安装ByteBuddyAgent,用于在运行时修改类。
    ByteBuddyAgent.install();
    
    // 定义原始类,本例中为HighlightHelper类。
    Class<?> originalClass = HighlightHelper.class;

    // 使用ByteBuddy重定义原始类。
    new ByteBuddy()
            .redefine(originalClass)
            // 选择要修改的方法:名为highlight,接受String、List和UnaryOperator作为参数,返回String类型。
            .method(ElementMatchers.named("highlight")
                    .and(ElementMatchers.takesArguments(String.class, List.class, UnaryOperator.class))
                    .and(ElementMatchers.returns(String.class)))
            // 为选中的方法插入固定返回值"修改成功",即修改方法的行为。
            .intercept(FixedValue.value("修改成功"))
            // 生成并加载修改后的类定义,使用已安装的代理进行类加载。
            .make()
            .load(originalClass.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent());

    // 调用修改后的HighlightHelper类的highlight方法,验证修改是否成功。
    String result = HighlightHelper.highlight("some", List.of(), s -> s);
    System.out.println(result);

}

2.3、运行结果

[1]

byte-buddy官方地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、场景
  • 2、如何修改?
    • 2.1、引入byte-buddy
      • 2.2、代码实现
        • 2.3、运行结果
        相关产品与服务
        腾讯云服务器利旧
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档