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:
@Specializes z AltClass3AltClass3 jako <alternative> v souboru jar1/META-INF/beans.xmlDalší informace o implementaci Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2 viz Změny chování Contexts and Dependency Injection 1.2.