Třídy používající obě anotace Specializes i Alternative, nejsou vloženy do jiných modulů

Toto pravidlo značí třídy, které jsou anotovány s použitím anotací @Specializes a @Alternative. Je-li třída odkazována třídou z jiného modulu, není tato třída vkládána do druhého modulu, pokud není uvedena jako <alternative> v souboru META-INF/beans.xml jiného modulu.

V následujícím příkladu je třída AltClass3 uvedena v souboru jar2/META-INF/beans.xml jako <alternative>. Třída není uvedena jako <alternative> v souboru jar1/META-INF/beans.xml.


WEB-INF/lib/jar1: Class1 {
    @Inject @SomeQualifer String foo;
  }
 
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer Řetězec doFoo() { ... } }
  @Alternative @Specializes AltClass3 rozšiřuje Class2 { @Produces @SomeQualifer String doFoo() { ... } } 

V implementaci CDI (Contexts and Dependency Injection) verze 1.0 je třída Class2 vložena a použita jako producent pro třídu Class1.foo. V implementaci CDI není vložena třída Class2 a aplikace se nespouští a uvádí, že nelze nalézt žádného producenta pro třídu Class1.foo.

Problém můžete vyřešit dvěma způsoby:

Další informace o implementaci Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2 viz Změny chování Contexts and Dependency Injection 1.2.