Ta reguła powoduje oznaczenie flagą klas opatrzonych adnotacjami @Specializes i @Alternative.
Jeśli klasa jest przywoływana przez klasę z innego modułu, klasa nie jest wstrzykiwana do innego modułu chyba że jest wymieniona w <alternatives> w META-INF/beans.xml innego modułu.
W poniższym przykładzie klasa AltClass3 jest wymieniona w pliku jar2/META-INF/beans.xml w <alternatives>. Klasa nie jest wymieniona w <alternatives> w pliku jar1/META-INF/beans.xml.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer łańcuch doFoo() { ... } }
@Alternative @Specizes AltClass3 rozszerza Class2 { @Produces @SomeQualifer String doFoo() { ... } }
W implementacji Contexts and Dependency Injection (CDI) 1.0 klasa Class2 jest wstrzykiwana i używana jako producent dla Class1.foo.
W implementacji CDI 1.2 klasa Class2 nie jest wstrzykiwana, a aplikacja nie uruchamia się i wyświetla komunikat informujący, że nie można znaleźć żadnego producenta dla Class1.foo.
Ten problem można rozwiązać na dwa sposoby:
@Specializes z AltClass3AltClass3 w <alternatives> w pliku jar1/META-INF/beans.xmlWięcej informacji na temat implementacji Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2 można znaleźć na stronie Zmiany w działaniu specyfikacji Contexts and Dependency Injection 1.2.