我试图弄清楚如何使用 Byte Buddy 设置实例字段的值。文档说:
在调用此类动态类的实例的方法之前,请始终记住为该字段分配一个值。否则,方法委托将导致 NullPointerException。
但是我在文档或单元测试中看不到如何做到这一点。
我的动态课程是:
new ByteBuddy().subclass(AbstractService.class)
.name(serviceName)
.method(ElementMatchers.named("start").and(
ElementMatchers.takesArguments(0)))
.intercept(
MethodDelegation.toInstanceField(service, "consumer")
.filter(ElementMatchers.isAnnotatedWith(Start.class)))
.method(ElementMatchers.named("stop").and(
ElementMatchers.takesArguments(0)))
.intercept(
MethodDelegation.to(instance).filter(
ElementMatchers.isAnnotatedWith(Stop.class)))
.make();
我看到另一个帖子的答案是拦截任何构造函数并@FieldProxy
与 a 一起使用,MethodDelegation
但我不知道该怎么做。我在结果方面所做的一切尝试都会导致结果的一些变化.constructor(ElementMatchers.any()).intercept(...)
:
java.lang.IllegalArgumentException: [] 中的任何一个都不允许来自...的委派