Ich versuche herauszufinden, wie Sie den Wert eines Instanzfeldes mit Byte Buddy setzen. Die Dokumentation lautet:Setzen Sie ein instanceField in Byte Buddy
Denken Sie immer daran, diesem Feld einen Wert zuzuweisen, bevor Sie Methoden für eine Instanz einer solchen dynamischen Klasse aufrufen. Andernfalls führt eine Delegierung der Methode zu einer NullPointerException.
Aber ich sehe nirgendwo in der Dokumentation oder der Unit-Tests, wie dies zu tun ist.
Meine dynamische Klasse:
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();
Ich sehe eine andere Stelle mit einer Antwort jeden Konstruktor abzufangen und verwenden @FieldProxy
mit einem MethodDelegation
aber ich sehe nicht, wie es zu tun. Alles, was ich habe in in einigen Variationen von .constructor(ElementMatchers.any()).intercept(...)
Ergebnisse in Bezug auf die Ergebnisse versucht:
java.lang.IllegalArgumentException: Keine [] ermöglicht Delegation ...