@TargetSE(valueSE={FIELDSE,PARAMETERSE}) @RetentionSE(valueSE=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 ); } ... }
@Decorator specifies that a class is a decorator.
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.