Diese Regel markiert Klassen, die mit den Annotationen @Specializes und @Alternative annotiert sind.
Wenn die Klasse von einer Klasse eines anderen Moduls referenziert wird, wird die Klasse nicht in das andere Modul injiziert es sei denn, sie ist in <alternatives> in der META-INF/beans.xml des anderen Moduls aufgeführt.
Im folgenden Beispiel ist die Klasse AltClass3 in der Datei jar2/META-INF/beans.xml-Datei unter <alternatives> aufgeführt. Die Klasse ist nicht in <alternatives> in der jar1/META-INF/beans.xml Datei aufgeführt.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Zeichenfolge doFoo() { ... } }
@Alternative @Specializes AltClass3 extends Class2 { @Produces @SomeQualifer String doFoo() { ... } }
In der Contexts and Dependency Injection (CDI) 1.0-Implementierung wird Class2 eingefügt und als Producer Class1.foo verwendet.
In der CDI 1.2-Implementierung wird Class2 nicht eingefügt und die Anwendung wird mit dem Hinweis, dass kein Producer für Class1.foo gefunden wurde, nicht gestartet.
Sie können dieses Problem auf zwei Arten beheben:
@Specializes aus AltClass3 entfernenAltClass3 in der <alternatives> in der jar1/META-INF/beans.xml DateiWeitere Informationen zur CDI 1.2-Implementierung von Java EE 7 (Java Platform, Enterprise Edition) finden Sie unter Contexts and Dependency Injection 1.2 behavior changes.