Specializes と Alternative の両方のアノテーションを使用するクラスは他のモジュールに注入されない

この規則により、@Specializes および @Alternative の両方のアノテーションが付けられているクラスにフラグを立てます。 クラスが他のモジュールのクラスから参照されている場合、そのクラスは他のモジュールに注入されません。 に注入されません。 META-INF/beans.xml <alternatives>にリストされていない限り、クラスは他のモジュールに注入されません。

以下の例では、 AltClass3 クラスが jar2/META-INF/beans.xmlファイルの の<alternatives>にリストされています。.xmlファイルの<alternatives>には、このクラスはリストされていません。 jar1/META-INF/beans.xmlファイルにリストされていません。


WEB-INF/lib/jar1: Class1 {
    @Inject @SomeQualifer String foo;
  }
 
WEB-INF/lib/jar2: Class2 { @Produces @SomeQualifer ストリング doFoo() { ... } }
  @Alternative @Specializes AltClass3 extends Class2 { @Produces @SomeQualifer String doFoo() { ... } }  

Contexts and Dependency Injection (CDI) 1.0 実装では、Class2 が注入されて Class1.foo のプロデューサーとして使用されます。 CDI 1.2 実装では、Class2 は注入されず、Class1.foo のプロデューサーが見つからないことが示されて、アプリケーションが開始しません。

この問題は以下の 2 つの方法で解決できます。

Java Platform, Enterprise Edition (Java EE 7) CDI 1.2 実装について詳しくは、『 Contexts and Dependency Injection 1.2 behavior changes』を参照してください。