パッケージ jakarta.enterprise.inject

アノテーション型 Produces


  • @TargetSE({METHODSE,FIELDSE})
    @RetentionSE(RUNTIMESE)
    @DocumentedSE
    public @interface Produces

    プロデューサーのメソッドまたはフィールドを識別します。Bean クラスのメソッドまたはフィールドに適用できます。

    プロデューサーメソッドは、マネージ Bean クラスまたはセッション Bean クラスの非抽象メソッドである必要があります。プロデューサーメソッドは、静的または非静的のいずれかです。Bean がセッション Bean の場合、プロデューサーメソッドは EJB のビジネスメソッドまたは Bean クラスの静的メソッドのいずれかである必要があります。

     public class Shop {
        @Produces @ApplicationScoped 
        @Catalog @Named("catalog") 
        List<Product> getProducts() { ... }
        ...
     }
     

    プロデューサーフィールドは、マネージド Bean クラスまたはセッション Bean クラスのフィールドである必要があります。プロデューサーフィールドは、静的または非静的のいずれかです。Bean がセッション Bean の場合、プロデューサーフィールドは Bean クラスの静的フィールドである必要があります。

     public class Shop { 
        @Produces @ApplicationScoped 
        @Catalog @Named("catalog") 
        List<Product> products = ...;
        ...
     }
     

    プロデューサーメソッドが null 値を返す場合がある場合、またはアクセス時にプロデューサーフィールドに null 値が含まれる場合がある場合、プロデューサーメソッドまたはフィールドのスコープは @Dependent である必要があります。

    プロデューサーメソッドの戻り値の型またはプロデューサーフィールドの型は、型変数ではない場合があります。

    プロデューサーメソッドの戻り値の型またはプロデューサーフィールドの型がパラメーター化された型である場合、実際の型パラメーターまたは型パラメーターごとに型変数を指定する必要があります。

    プロデューサーメソッドの戻り値の型またはプロデューサーフィールド型が型変数を持つパラメーター化された型である場合、スコープ @Dependent が必要です。

    プロデューサーメソッドには、任意の数のパラメーターを含めることができます。すべてのプロデューサーメソッドパラメーターはインジェクションポイントです。

     public class OrderFactory {
     
         @Produces
         @ConversationScoped
         public Order createCurrentOrder(Shop shop, @Selected Product product) {
             Order order = new Order(product, shop);
             return order;
         }
     
     }
     

    Bean は、複数のプロデューサーメソッドまたはフィールドを宣言する場合があります。

    プロデューサーのメソッドとフィールドは、Bean サブクラスに継承されません。

    インターセプターとデコレーターは、プロデューサーメソッドまたはフィールドを宣言できません。

    作成者:
    Gavin King, Pete Muir
    関連事項:
    Disposes