パッケージ jakarta.decorator

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