Clase care folosesc ambele adnotări Specializes şi Alternative nu sunt injectate în alte module

Această regulă semnalează clase care sunt adnotate cu ambele adnotări @Specializes şi @Alternative. Dacă clasa este menționată de o clasă din alt modul, clasa nu este injectată în celălalt modul cu excepția cazului în care este listată în <alternative> în META-INF/beans.xml al celuilalt modul.

În exemplul următor, clasa AltClass3 este listată în fișierul jar2/META-INF/beans.xml fișier în <alternatives>. Clasa nu este listată în <alternatives> în fișierul jar1/META-INF/beans.xml fișier.


WEB-INF/lib/jar1:
  Class1 {
    @Inject @SomeQualifer String foo;
  }
 
WEB-INF/lib/jar2:
  Class2 { 
    @Produces @SomeQualifer String doFoo() { ... } 
  }
  @Alternative @Specializes AltClass3 extends Class2 { 
    @Produces @SomeQualifer String doFoo() { ... } 
  }  

În implementarea CDI (Contexts and Dependency Injection) 1.0, Class2 este injectată şi utilizată ca un producător pentru Class1.foo. În implementarea CDI 1.2, Class2 nu este injectată şi aplicaţia nu porneşte, indicând că nu poate fi găsit niciun producător pentru Class1.foo.

Puteţi rezolva problema în două moduri:

Pentru informaţii suplimentare despre implementarea Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2, vedeţi Modificări de comportament CDI (Contexts and Dependency Injection) 1.2.