パッケージ 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 コンストラクターメソッドパラメーターである必要があります。
コンテナーは、デリゲートオブジェクトをデリゲートインジェクションポイントに注入します。デリゲートオブジェクトは、デコレータスタックに沿ってデリゲート型を実装し、メソッド呼び出しをデリゲートします。ビジネスメソッドのインターセプト中にコンテナーがデコレータを呼び出すと、デコレータはデリゲートオブジェクトの任意のメソッドを呼び出すことができます。デコレータが他のときにデリゲートオブジェクトを呼び出すと、呼び出されたメソッドは
IllegalStateException
SE をスローします。@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.