パッケージ jakarta.enterprise.inject

アノテーション型 Disposes


  • @TargetSE(PARAMETERSE)
    @RetentionSE(RUNTIMESE)
    @DocumentedSE
    public @interface Disposes

    ディスポーザメソッドの破棄されたパラメーターを識別します。Bean クラスのメソッドのパラメーターに適用できます。

     public class UserDatabaseEntityManager {
     
         @Produces
         @ConversationScoped
         @UserDatabase
         public EntityManager create(EntityManagerFactory emf) {
             return emf.createEntityManager();
         }
     
         public void close(@Disposes @UserDatabase EntityManager em) {
             em.close();
         }
     
     }
     
     public class Resources {
     
         @PersistenceContext
         @Produces
         @UserDatabase
         private EntityManager em;
     
         public void close(@Disposes @UserDatabase EntityManager em) {
             em.close();
         }
     
     }
     

    ディスポーザメソッドを使用すると、アプリケーションは、プロデューサーメソッドまたはプロデューサーフィールドによって返されたオブジェクトのカスタマイズされたクリーンアップを実行できます。

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

    Bean は、複数のディスポーザメソッドを宣言できます。

    各ディスポーザメソッドには、対応するプロデューサーメソッドまたはプロデューサーフィールドの戻り値の型と同じ型の、破棄されたパラメーターが 1 つだけ必要です。コンテナーは、プロデューサーメソッドまたはプロデューサーフィールドのディスポーザーメソッドを検索するときに、破棄されたパラメーターの型と修飾子を考慮します。破棄されたパラメーターが同じ Bean クラスによって宣言されたプロデューサーメソッドまたはプロデューサーフィールドに解決される場合、コンテナーは、そのプロデューサーメソッドまたはプロデューサーフィールドによって返されたインスタンスを破棄するときにこのメソッドを呼び出す必要があります。

    破棄されたパラメーターに加えて、disposer メソッドは、修飾子も指定できる追加のパラメーターを宣言できます。これらの追加パラメーターはインジェクションポイントです。

     public void close(@Disposes @UserDatabase EntityManager em, Logger log) { ... }
     

    ディスポーザメソッドは、Bean クラスによって宣言された複数のプロデューサーメソッドまたはプロデューサーフィールドに解決される場合があります。その場合、コンテナーは、これらのプロデューサーメソッドまたはプロデューサーフィールドのいずれかによって返されたインスタンスを破棄するときにそれを呼び出す必要があります。

    Disposer メソッドは Bean サブクラスによって継承されません。

    インターセプターとデコレーターは、ディスポーザーメソッドを宣言できません。

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