【JavaAgent】字节码编程 - 使用Byte-buddy工具实现插件化开发

简介

假设我们有需求:所有的控制器(Controller)添加耗时,对所有的服务(Service)添加调用信息,使用一个agent代理,也就是所有实现在一个jar包中,该如何处理?

此类问题,最好采用插件化开发:定义一个插件接口,各个功能实现接口即可。本文讲解如何定义接口,接口与byte-buddy集成,不涉及具体功能实现。

使用版本

  • JDK 11
  • byte-buddy 1.12.3

开发项目

要定义接口,必须先了解byte-buddy如何使用,下面是一个简单的例子:

        AgentBuilder.Transformer transformer = (builder, typeDescription, classLoader, javaModule) -> {
            return builder
                    // 拦截任意方法
                    .method(ElementMatchers.any())                                <<1>>
                    // 委托
                    .intercept(MethodDelegation.to(ElapseOfTimeWriter.class));    <<2>>
        };


        new AgentBuilder.Default()
                // 指定需要拦截的类
                .type(ElementMatchers.named(TARGET_CLASS))                         <<3>>
                .transform(transformer)                                            <<4>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值