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 modulból származó osztály hivatkozik, az osztály nem kerül beillesztésre a másik modulba kivéve, ha szerepel a <alternatívák> listában a másik modul META-INF/beans.xml oldalán.
A következő példában a AltClass3 osztály a következő listában szerepel jar2/META-INF/beans.xml fájlban <alternatívák> alatt található. Az osztály nem szerepel a <alternatives> alatt a <alternatives> fájlban 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 címet a <alternatives> mezőben a jar1/META-INF/beans.xml fájlbanA 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.