使用 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
作为字节码模板。
是否可以在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
作为字节码模板。