Я пытаюсь выяснить, как установить значение поля экземпляра с помощью Byte Buddy. В документации написано:Установите экземплярField в 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
с MethodDelegation
, но я не вижу, как это сделать. Все, что я пытался с точки зрения результатов в какой-то вариации .constructor(ElementMatchers.any()).intercept(...)
результатов в:
java.lang.IllegalArgumentException: Ни один из [] не позволяет делегации ...