Это правило отмечает классы, имеющие обе аннотации @Specializes и @Alternative.
При наличии ссылки на такой класс в классе из другого модуля он не внедряется в
этот модуль, если он не указан как <alternative> в файле META-INF/beans.xml этого модуля.
В следующем примере класс AltClass3 задан в файле jar2/META-INF/beans.xml как <alternative>. При этом класс не указан как <alternative> в файле 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 как <alternative> в файле jar1/META-INF/beans.xmlЗа дополнительной информацией о реализации CDI 1.2 в Java Platform, Enterprise Edition (Java EE) 7 обратитесь к документу Contexts and Dependency Injection 1.2: изменение принципов работы.