11.2.4.3. CDI を用いたオブジェクトの Bean へのインジェクト
META-INF/beans.xml
または WEB-INF/Beans.xml
ファイルが含まれている場合、デプロイメント内の各オブジェクトは CDI を使用して注入できます。
@Inject
アノテーションを使用して、Bean の任意の部分にオブジェクトを注入します。クラスのインスタンスを取得するには、bean 内でフィールドに@Inject
アノテーションを付けます。例11.6
TextTranslator
インスタンスをTranslateController
に挿入しますpublic class TranslateController { @Inject TextTranslator textTranslator; ...
public class TranslateController { @Inject TextTranslator textTranslator; ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注入されたオブジェクトのメソッドを使用する
注入されたオブジェクトのメソッドを直接使用できます。TextTranslator
にメソッドがあると仮定しますtranslate
。例11.7 注入されたオブジェクトのメソッドを使用する
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Bean のコンストラクターでインジェクションを使用します。
ファクトリーやサービスロケーターを使用して作成する代わりに、Bean のコンストラクターへオブジェクトをインジェクトできます。例11.8 Bean のコンストラクターでインジェクションを使用します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Instance(<T>)
インターフェースを使用してインスタンスをプログラムにより取得します。Bean 型でパラメーター化されると、Instance
インターフェースは TextTranslator のインスタンスを返すことができます。例11.9 プログラムでインスタンスを取得する
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果:
オブジェクトを Bean にインジェクトすると、Bean は全オブジェクトのメソッドとプロパティーを使用できるようになります。Bean のコンストラクターにインジェクトするときに、インジェクションがすでに存在するインスタンスを参照する場合以外は、Bean のコンストラクターが呼び出されるとインジェクトされたオブジェクトのインスタンスが作成されます。たとえば、セッションの存続期間内にセッションスコープの Bean をインジェクトしても、新しいインスタンスは作成されません。