이 규칙은 @Specializes 및 @Alternative 어노테이션이 둘 다 있는 클래스에 플래그를 지정합니다.
클래스가 다른 모듈의 클래스에서 참조되는 경우, 그 클래스는 다른 모듈의 META-INF/beans.xml에
<alternative>로 나열되지 않으면 다른 모듈에 삽입되지 않습니다.
다음 예제에서 AltClass3 클래스가 jar2/META-INF/beans.xml 파일에
<alternative>로 나열되어 있습니다. 클래스는 jar1/META-INF/beans.xml 파일에는 <alternative>로 나열되지 않습니다.
WEB-INF/lib/jar1: Class1 {
@Inject @SomeQualifer String foo;
}
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer 문자열 doFoo() { ... } }
@Alternative @Specialist는 AltClass3 Class2 { @Produces @SomeQualifer String doFoo() { ... } }을 (를) 확장합니다.
CDI(Contexts and Dependency Injection) 1.0 구현에서 Class2가 삽입되고 Class1.foo에 대한 프로듀서로 사용됩니다.
CDI 1.2 구현에서는 Class2가 삽입되지 않으며 Class1.foo에 대한 프로듀서를 찾을 수 없다고 표시되며 애플리케이션이 시작되지 않습니다.
다음 두 가지 방법으로 문제를 해결할 수 있습니다.
@Specializes 어노테이션을 AltClass3에서 제거jar1/META-INF/beans.xml 파일에서 AltClass3을 <alternative>로 선언Java 플랫폼, Enterprise Edition(Java EE) 7 CDI 1.2 구현에 대한 자세한 정보는 Contexts and Dependency Injection 1.2 동작 변경사항을 참조하십시오.