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: [] のどれもからの委譲を許可していません...