使用 ByteBuddy 的条件方法委托

Conditional method delegation using ByteBuddy

是否可以在bytebuddy 的方法委托调用中进行条件调用?假设我们有以下情况:

Method serviceMethod = serviceHandler.getClass()
                .getDeclaredMethod(methodName, String.class, String.class, Object.class);
this.serviceHandler= byteBuddy.subclass(serviceHandler.getClass()).method(ElementMatchers.named("handleService"))
                .intercept(SuperMethodCall.INSTANCE.andThen(MethodCall.invoke(handleMethod).withArgument(0, 1, 2))).make().load(getClass().getClassLoader()).getLoaded().newInstance();

我们可以做类似 "only if super method call returns true then call subclasses method" 的事情吗?那将是一个有条件的 "andThen":

intercept(SuperMethodCall.INSTANCE.**andThenIfConditionFullfilled**(MethodCall.invoke(handleMethod)

不,这是不可能的,除非您实施自己的 Implementation。条件代码很快就会变得复杂。 Byte Buddy 的目标是生成尽可能少的代码。

如果您想避免委派,可以使用 Advice 作为字节码模板。