Это правило отмечает классы, имеющие обе аннотации @Specializes и @Alternative.
Если на класс ссылается класс из другого модуля, то этот класс не инжектируется в другой модуль если только он не перечислен в <alternatives> в META-INF/beans.xml другого модуля.
В следующем примере класс AltClass3 указан в jar2/META-INF/beans файле.xml в <alternatives>. Класс не указан в <alternatives> в файле jar1/META-INF/beans файле.xml.
WEB-INF/lib/jar1:
Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2:
Class2 { @Produces @SomeQualifer String doFoo() { ... }
}
@Alternative @Specializes AltClass3 расширяет Class2 { @Produces @SomeQualifer String doFoo() { ... }
}
В реализации Contexts and Dependency Injection (CDI) 1.0 класс Class2 внедряется и используется как Producer для Class1.foo.
В реализации CDI 1.2 класс Class2 не внедряется, и при запуске приложения возникает ошибка, так как не найден Producer для Class1.foo.
Эту неполадку можно устранить двумя способами:
@Specializes из AltClass3AltClass3 в <alternatives> в jar1/META-INF/beans файле.xml</codeЗа дополнительной информацией о реализации CDI 1.2 в Java Platform, Enterprise Edition (Java EE) 7 обратитесь к документу Contexts and Dependency Injection 1.2: изменение принципов работы.