CDI は beans.xml ファイルがない場合に暗黙的 Bean をスキャンする

Contexts and Dependency Injection (CDI) 1.1 仕様では、暗黙的 Bean ディスカバリー・モードが導入されました。そのため、WebSphere Application Server での Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 実装とは動作とパフォーマンスが変更されています。

この規則により、プロジェクトに beans.xml ファイルが含まれていない場合に WEB-INF または META-INF フォルダーにフラグを立てます。 Java EE 6 CDI 1.0 から Java EE 7 CDI 1.1 以降に移行する際には、beans.xml ファイルがない場合でも、暗黙的 Bean ディスカバリーのため、すべての WAR および JAR ファイルがランタイムによってスキャンされます。 これにより、以下を使用可能にすると、Bean ディスカバリーのパフォーマンスが低下する可能性があります。 cdi-1.2 Liberty上のフィーチャー。

Java EE 7 では、beans.xml ファイルが定義されていない場合、ランタイムは Bean 定義アノテーションを自動的にスキャンします。この動作を無効にするには、以下の例に示すように、Bean ディスカバリー・モードを none に設定した beans.xml ファイルを追加します。


<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"/>

WebSphere Application Server traditional では、以下の方法でこの動作を無効にできます。

WebSphere traditional でのこれらのプロパティーの設定について詳しくは、 Custom Properties for improving application startup in WebSphere Application Server の資料を参照してください。

Java EE 7 CDI 1.2 実装について詳しくは、 Contexts and Dependency Injection 1.2 での振る舞いの変更を参照してください。