Klasy korzystające z adnotacji zarówno Specializes, jak i Alternative nie są wstrzykiwane do innych modułów

Ta reguła powoduje oznaczenie flagą klas opatrzonych adnotacjami @Specializes i @Alternative. Jeśli taka klasa jest przywoływana przez klasę z innego modułu, klasa ta nie jest wstrzykiwana do tego modułu, o ile nie jest wymieniona jako <alternative> w pliku META-INF/beans.xml tego modułu.

W poniższym przykładzie klasa AltClass3 jest wymieniona w pliku jar2/META-INF/beans.xml jako <alternative>. Klasa ta nie jest wymieniona jako <alternative> 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:

Wię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.