この規則により、@Specializes および @Alternative の両方のアノテーションが付けられているクラスにフラグを立てます。クラスが別のモジュールからのクラスに参照される場合、そのクラスがその別のモジュールの META-INF/beans.xml に <alternative> としてリストされていない限り、その別のモジュールに注入されません。
以下の例では、AltClass3 クラスが jar2/META-INF/beans.xml ファイルに <alternative> としてリストされています。そのクラスは jar1/META-INF/beans.xml ファイルでは <alternative> としてリストされていません。
|
Contexts and Dependency Injection (CDI) 1.0 実装では、Class2 が注入されて Class1.foo のプロデューサーとして使用されます。
CDI 1.2 実装では、Class2 は注入されず、Class1.foo のプロデューサーが見つからないことが示されて、アプリケーションが開始しません。
この問題は以下の 2 つの方法で解決できます。
@Specializes アノテーションを AltClass3 から削除するjar1/META-INF/beans.xml ファイルで AltClass3 を <alternative> として宣言するJava Platform, Enterprise Edition (Java EE) 7 CDI 1.2 実装について詳しくは、 Contexts and Dependency Injection 1.2 での振る舞いの変更を参照してください。