パッケージ jakarta.decorator

アノテーション型 Delegate


  • @TargetSE({FIELDSE,PARAMETERSE})
    @RetentionSE(RUNTIMESE)
    @DocumentedSE
    public @interface Delegate

    デコレータのデリゲートインジェクションポイントを識別します。デコレータ Bean クラスのフィールド、Bean コンストラクターパラメーターまたは初期化メソッドパラメーターに適用できます。

     @Decorator 
     class TimestampLogger implements Logger { 
        @Inject @Delegate @Any Logger logger; 
        ... 
     }
     
     @Decorator 
     class TimestampLogger implements Logger { 
        private Logger logger;
        
        @Inject
        public TimestampLogger(@Delegate @Debug Logger logger) { 
           this.logger=logger; 
        } 
        ... 
     }
     

    デコレータには、デリゲートインジェクションポイントが 1 つだけ必要です。デリゲートインジェクションポイントは、インジェクトされたフィールド、初期化子メソッドパラメーター、Bean コンストラクターメソッドパラメーターである必要があります。

    コンテナーは、デリゲートオブジェクトをデリゲートインジェクションポイントに注入します。デリゲートオブジェクトは、デコレータスタックに沿ってデリゲート型を実装し、メソッド呼び出しをデリゲートします。ビジネスメソッドのインターセプト中にコンテナーがデコレータを呼び出すと、デコレータはデリゲートオブジェクトの任意のメソッドを呼び出すことができます。デコレータが他のときにデリゲートオブジェクトを呼び出すと、呼び出されたメソッドは IllegalStateExceptionSE をスローします。

     @Decorator 
     class TimestampLogger implements Logger { 
        @Inject @Delegate @Any Logger logger; 
        
        void log(String message) {
           logger.log( timestamp() + ": " + message );
        }
        ...
     }
     

    CDI Lite の実装は、デコレータのサポートを提供する必要はありません。

    作成者:
    Gavin King, Pete Muir
    関連事項:
    Decorator specifies that a class is a decorator.