In der Contexts and Dependency Injection (CDI) 1.0-Implementierung kann die Methode
getAnnotatedin einer Klasse, die die Schnittstelle javax.enterprise.inject.spi.InjectionPoint implementiert,
eine Instanz von javax.enterprise.inject.spi.Annotated zurückgeben.
In der CDI 1.2-Implementierung muss die Methode getAnnotated eine Instanz von
AnnotatedField oder AnnotatedParameter zurückgeben, je nachdem, ob der Injektionspunkt
ein eingefügtes Feld oder ein Parameter in einem Konstruktor oder einer Methode ist.
Diese Regel markiert Aufrufe des Konstruktors Annotated in der Methode
getAnnotated in einer Klasse, die die Schnittstelle
javax.enterprise.inject.spi.InjectionPoint implementiert. Der folgende Aufruf von
new Annotated() wird markiert:
< code> public class MyInjectionPoint implementiert InjectionPoint {
public Annotated getAnnotated() {
return new Annotated () {
public Set < Anmerkung> getAnnotations() {
return null;
}
Am 1.
}
}
Am 1.
} < /Code>
Der Scanner für binäre Anwendungen markiert alle getAnnotated-Methoden in Klassen, die die Schnittstelle javax.enterprise.inject.spi.InjectionPoint implementieren.
Wenn die markierte getAnnotated-Methode eine Instanz von AnnotatedParameter oder AnnotatedField zurückgibt, kann diese Regel ignoriert werden.
Gibt die getAnnotated-Methode jedoch eine Instanz von Annotated zurück, muss der Code geändert werden.
In der CDI 1.2-Implementierung wird die Anwendung, die die Klasse MyInjectionPoint enthält, nicht gestartet und löst
die folgende Ausnahme aus:
org.jboss.weld.exceptions.IllegalArgumentException: WELD-001521: InjectionPoint.getAnnotated() must return either AnnotatedParameter or AnnotatedField
Zur Behebung dieses Problems ersetzen Sie den Aufruf von new Annotated() durch new AnnotatedField() oder
new AnnotatedParameter(), je nachdem, ob der Injektionspunkt ein eingefügtes Feld oder ein Parameter in einem Konstruktor oder einer Methode
ist.
Weitere Informationen zur CDI 1.2-Implementierung von Java EE 7 finden Sie unter Änderungen im Verhalten von Contexts and Dependency Injection zwischen Releases.