CDI 會辨識隱含的 Bean 保存檔

Contexts and Dependency Injection (CDI) 1.1 規格引進隱含的 Bean 探索模式,導致 Java Platform Enterprise Edition (Java EE) 6 CDI 1.0 實作在 WebSphere Application Server 中的行為和效能變更。隱含的 Bean 是包含一個以上 Bean 類別的任何保存檔,含有 Bean 定義註釋或一個以上的階段作業 Bean。

從 Java EE 6 CDI 1.0 移至 Java EE 7 CDI 1.1 或更新版本時,隱含的 Bean 探索導致所有 WAR 和 JAR 檔案由執行時期掃描,即使它們沒有 beans.xml 檔案亦然。此掃描是 Java EE 6 CDI 1.0 的一項行為變更,其中遺漏的 beans.xml 檔案會防止掃描應用程式中的保存檔。

此規則在沒有 beans.xml 檔案的所有 WAR 和 JAR 檔案中標示下列 Bean 定義註釋和 Enterprise JavaBeans (EJB) 階段作業 Bean。

二進位應用程式掃描器會標記註解為 @NormalScope. 這些註解可以被偵測到,即使它們 出現在 beans.xml 文件的上下文之外。

若要在執行時期於 WAR 或 JAR 層次停用此 CDI 行為變更,請新增 beans.xml 檔案,並將 Bean 探索模式設為 none,如下面的範例所示。


<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
		  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
		  		      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" 
		  		      bean-discovery-mode="none" version="1.1">
</beans>

在 Liberty 中,您也可以透過將下列內容新增至 server.xml 檔來停用此行為。


<cdi12 enableImplicitBeanArchives="false"/>

如需 Java EE 7 CDI 1.2 實作的相關資訊,請參閱 Contexts and Dependency Injection 1.2 行為變更