Specializes 및 Alternative 어노테이션을 모두 사용하는 클래스는 다른 모듈로 삽입되지 않음

이 규칙은 @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에 대한 프로듀서를 찾을 수 없다고 표시되며 애플리케이션이 시작되지 않습니다.

다음 두 가지 방법으로 문제를 해결할 수 있습니다.

Java 플랫폼, Enterprise Edition(Java EE) 7 CDI 1.2 구현에 대한 자세한 정보는 Contexts and Dependency Injection 1.2 동작 변경사항을 참조하십시오.