java8调用unsafe_使用Byte Buddy拦截对Java 8 lambda表达式的调用

我尝试拦截对方法的调用,并使用Byte Buddy AgentBuilder调用

Java 8 lambda表达式,如下所示:

static {

final Instrumentation inst = ByteBuddyAgent.install();

new AgentBuilder.Default()

.type(ElementMatchers.nameContainsIgnoreCase("foo"))

.transform((builder, typeDescription) ->

builder.method(ElementMatchers.any())

.intercept(MethodDelegation.to(LogInterceptor.class)))

.installOn(inst);

}

public static class LogInterceptor {

@RuntimeType

public static Object log(@SuperCall Callable> superCall) throws Exception {

System.out.println("yeah...");

return superCall.call();

}

}

我正在使用Byte Buddy v0.7.1.

它可以截取以下Runnable(匿名类):

FunnyFramework.callMeLater(new Runnable() {

@Override

public void run() {

System.out.println("Hello from inner class");

}

});

当然,对对象的任何调用都定义为普通(非匿名)类.但拦截不适用于lambda表达式:

FunnyFramework.callMeLater(() -> {

System.out.println("Hello from lambda");

});

我怎样才能拦截lambda表达式调用?据我所知,在Byte Buddy中没有LambdaInterceptor这样的东西.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值