Klassen, die die Annotationen Specializes und Alternative verwenden, werden nicht in andere Module eingefügt

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:

Weitere 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.