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:
@Specializes annotációt az
AltClass3 osztálybólAltClass3 osztályt az
<alternative> annotációval a
jar1/META-INF/beans.xml fájlban.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.