パッケージ jakarta.decorator
デコレータに関連するアノテーション。
デコレーターは 1 つ以上の Bean 型を実装し、それらの Bean 型を実装する Bean のビジネスメソッド呼び出しをインターセプトします。これらの Bean 型は装飾型と呼ばれます。
デコレータは、管理された Bean アノテーション付き @Decorator
です。
デコレータは表面的にはインターセプタに似ていますが、ビジネスセマンティクスで操作を直接実装するため、ビジネスロジックを実装でき、逆に、インターセプタが最適化されている横断的問題を実装できません。デコレーターはインターセプターの後に呼び出されます。
装飾された型
デコレーターの装飾された型のセットには、Serializable
SE を除く、Java インターフェースである管理対象 Bean のすべての Bean 型が含まれます。デコレーター Bean クラスとそのスーパークラスは、デコレーターの装飾型ではありません。デコレータクラスは抽象である場合があります。
デコレータはすべてのメソッドをインターセプトします:
- デコレータの装飾された型によって宣言されています
- これは、デコレータの Bean クラスによって実装されます。
デコレータは抽象クラスの場合があり、すべての装飾された型のすべてのメソッドを実装する必要はありません。
デリゲートインジェクションポイント
すべてのデコレータにはデリゲートインジェクションポイントがあります。デリゲートインジェクションポイントは、@Delegate
のアノテーションが付けられた Bean クラスのインジェクションポイントです。
デリゲートインジェクションポイントの型は、装飾されたすべての型を実装または拡張する必要があります。デリゲートインジェクションポイントの型を実装するためにデコレータは必要ありません。
有効なデコレーター
デフォルトでは、Bean アーカイブには有効なデコレータがありません。デコレータは、Bean アーカイブの beans.xml
ファイルの <decorators>
要素に Bean クラスをリストすることにより、明示的に有効にする必要があります。デコレータ宣言の順序によって、デコレータの順序が決まります。リストの前半にあるデコレータが最初に呼び出されます。
次の場合、デコレータは Bean にバインドされます。
- Bean は、デコレーターのデリゲートインジェクションポイントへの注入に適格です。
- デコレータは、Bean の Bean アーカイブで有効になっています。
マネージ Bean クラスが final として宣言されている場合、デコレーターがない可能性があります。マネージド Bean に非静的、非プライベートの final メソッドがある場合、そのメソッドを実装するデコレーターがない場合があります。
デコレータインスタンスは、デコレートするオブジェクトの依存オブジェクトです。