パッケージ jakarta.enterprise.inject

アノテーションインターフェース 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
関連事項: