アノテーション型 Dependent


  • @TargetSE({METHODSE,TYPESE,FIELDSE})
    @RetentionSE(RUNTIMESE)
    @DocumentedSE
    @Scope
    @InheritedSE
    public @interface Dependent

    Bean が従属疑似スコープに属することを指定します。

    スコープ @Dependent で宣言された Bean は、他の組み込みスコープ型の Bean とは異なる動作をします。Bean がスコープ @Dependent を持つように宣言されている場合:

    • Bean の注入されたインスタンスは、複数のインジェクションポイント間で共有されることはありません。
    • コンテナーによって作成されているオブジェクトに注入された Bean のインスタンスはすべて、新しく作成されたオブジェクトのライフサイクルにバインドされます。
    • EL 名で Bean を参照する JSF または JSP ページの UnifiedEL 式が評価されると、Bean のインスタンスが最大で 1 つインスタンス化されます。このインスタンスは、EL 式の 1 つの評価のみを処理するために存在します。Bean EL 名が EL 式に複数回出現する場合に再利用されますが、EL 式が再度評価されるとき、別の EL 式が評価されるときに再利用されることはありません。
    • プロデューサーメソッド、プロデューサーフィールド、ディスポーザーメソッド、オブザーバーメソッドの呼び出しを受け取る Bean のインスタンスは、その呼び出しのみを処理するために存在します。
    • ディスポーザーメソッドまたはオブザーバーメソッドのメソッドパラメーターに挿入された Bean のインスタンスは、メソッド呼び出しのみを処理するために存在します。

    @Dependent スコープのコンテキストオブジェクトの Context.get(Contextual, CreationalContext) 操作を呼び出すたびに、指定された Bean の新しいインスタンスが返されます。

    @Dependent スコープのコンテキストオブジェクトの Context.get(Contextual) 操作を呼び出すたびに、NULL 値が返されます。

    @Dependent スコープは常にアクティブです。

    スコープ @Dependent を持つ Bean の多くのインスタンスは、他の Bean または Java EE コンポーネントクラスインスタンスに属し、依存オブジェクトと呼ばれます。

    • デコレータとインターセプタのインスタンスは、それらがデコレートする Bean インスタンスの依存オブジェクトです。
    • スコープ @Dependent がフィールドに注入された Bean のインスタンス、Bean コンストラクターまたは初期化子メソッドは、それが注入された Bean または Java EE コンポーネントクラスインスタンスの従属オブジェクトです。
    • スコープ @Dependent がプロデューサーメソッドに注入された Bean のインスタンスは、プロデューサーメソッド Bean インスタンスの依存オブジェクトです。
    • Instance の直接呼び出しによって取得されたスコープ @Dependent を持つ Bean のインスタンスは、Instance のインスタンスの従属オブジェクトです。

    コンテナーが Bean またはインジェクションをサポートする Java EE コンポーネントクラスのインスタンスを破棄すると、@PreDestroy コールバックが完了した後、サーブレット destroy() メソッドが呼び出された後、コンテナーはすべての依存オブジェクトを破棄します。

    作成者:
    Gavin King, Pete Muir