Specializes és Alternative annotációkat egyaránt használó osztályok nem kerülnek beszúrásra más modulokba

Ez a szabály megjelöli az osztályokat, amelyek a @Specializes és @Alternative annotációval egyaránt meg vannak jelölve. Ha az osztályra egy másik modulban lévő osztály hivatkozik, akkor az osztály nem kerül beszúrásra a másik modulba, kivéve, ha fel van sorolva a másik modul META-INF/beans.xml fájljának <alternative> elemében.

A következő példában az AltClass3 osztály mint <alternative> van felsorolva a jar2/META-INF/beans.xml fájlban. Ez az osztály nem szerepel <alternative> annotációval a jar1/META-INF/beans.xml fájlban.


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() { ... } 
  }  

A Contexts and Dependency Injection (CDI) 1.0 megvalósításban beszúrásra kerül a Class2 osztály, és ez kerül felhasználásra a Class1.foo előállítójaként. A CDI 1.2 megvalósításban a Class2 osztály nem kerül beszúrásra, és az alkalmazás nem indul el, és azt állítja, hogy a Class1.foo osztályhoz nem található előállító.

A problémát kétféleképpen oldhatja meg:

A Java Platform, Enterprise Edition (Java EE) 7 CDI 1.2 megvalósítással kapcsolatos további információkért tekintse meg a következőt: Contexts and Dependency Injection 1.2 viselkedésváltozásai.