パッケージ 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
- 関連事項: