此規則會標示同時以 @Specializes 及 @Alternative 註釋標註的類別。
如果類別被其他模組的類別引用,該類別不會被注入到其他模組,除非 除非它 在其他模組的 META-INF/beans.xml 的 <alternatives> 中列出。
在下面的範例中, AltClass3 類別列在 jar2/META-INF/beans.xml 檔案 中列出。中的 <alternatives> 中未列出該類。 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 extends Class2 { @Produces @SomeQualifer String doFoo() { ... } }
在 Contexts and Dependency Injection (CDI) 1.0 實作中,Class2 將會注入並用作 Class1.foo 的產生器。
在 CDI 1.2 實作中,Class2 不會注入,且應用程式不會啟動,同時還會說明找不到 Class1.foo 的產生器。
您可以使用下列兩種方法解決此問題:
AltClass3 中移除 @Specializes 註釋 中的 <alternatives> 中聲明 AltClass3。 jar1/META-INF/beans.xml 檔案中如需 Java Platform Enterprise Edition (Java EE) 7 CDI 1.2 實作的相關資訊,請參閱環境定義和相依關係注入 1.2 行為變更。