インターフェース InterceptionFactory<T>
- 型パラメーター:
T
- ラッパーが作成される型
public interface InterceptionFactory<T>
InterceptionFactory
を使用すると、メソッド呼び出しがメソッドインターセプターによってインターセプトされ、提供されたインスタンスに転送されるラッパーインスタンスを作成できます。InterceptionFactory
の実装は、たとえばカスタム Bean の create メソッドで使用されるBeanManager.createInterceptionFactory(CreationalContext, Class)
を呼び出すことによって取得できます。public class MyCustomBean implements Bean<MyClass> { BeanManager bm; public MyBean(BeanManager bm) { this.bm = bm; } public MyClass create(CreationalContext<MyClass> creationalContext) { InterceptionFactory<MyClass> factory = bm.createInterceptionFactory(creationalContext, MyClass.class); factory.configure().filterMethods(m -> m.getJavaMember().getName().equals("shouldBeTransactional")).findFirst() .ifPresent(m -> m.add(new AnnotationLiteral<Transactional>() { })); return factory.createInterceptedInstance(new MyClass()); } }
コンテナーは、プロデューサーメソッドパラメーターに注入できるスコープ
Dependent
、Bean 型InterceptionFactory
、修飾子Default
を備えた組み込み Bean も提供する必要があります。@Produces @RequestScoped public MyClass produceMyClass(InterceptionFactory<MyClass> factory) { factory.configure().add(new AnnotationLiteral<Transactional>() { }); return factory.createInterceptedInstance(new MyClass()); }
このクラスのインスタンスは、再利用もスレッド間の共有にも適していません。
InterceptionFactory
のサポートを提供するために、CDI Lite の実装は必要ありません。- 導入:
- 2.0
- 作成者:
- Antoine Sabot-Durand
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 AnnotatedTypeConfigurator<T>
configure()
BeanManager.createInterceptionFactory(CreationalContext, Class)
に渡されるクラス用に作成された、またはInterceptionFactory
パラメーターインジェクションポイントから派生したAnnotatedType
で初期化されたAnnotatedTypeConfigurator
を返します。T
createInterceptedInstance(T instance)
メソッド呼び出しがメソッドインターセプターによってインターセプトされ、指定されたインスタンスに転送されるラッパーインスタンスを返します。InterceptionFactory<T>
ignoreFinalMethods()
createInterceptedInstance(Object)
の呼び出し中にインターセプトされたインスタンスの型階層のクラスによって宣言された public、protected、default の可視性を持つすべての非静的な final メソッドを無視するようにコンテナーに指示します。
メソッドの詳細
ignoreFinalMethods
InterceptionFactory<T> ignoreFinalMethods()
createInterceptedInstance(Object)
の呼び出し中にインターセプトされたインスタンスの型階層のクラスによって宣言された public、protected、default の可視性を持つすべての非静的な final メソッドを無視するようにコンテナーに指示します。無視されたメソッドは、
createInterceptedInstance(Object)
によって作成されたラッパーインスタンスで呼び出されるべきではありません。そうしないと、予期しない動作が発生します。- 戻り値:
- 自己
configure
AnnotatedTypeConfigurator<T> configure()
BeanManager.createInterceptionFactory(CreationalContext, Class)
に渡されるクラス用に作成された、またはInterceptionFactory
パラメーターインジェクションポイントから派生したAnnotatedType
で初期化されたAnnotatedTypeConfigurator
を返します。Configurator では、インターセプターを
createInterceptedInstance(Object)
によって返されるラッパーインスタンスに関連付けるために使用されるインターセプターバインディングを追加または削除できます。各呼び出しは同じ
AnnotatedTypeConfigurator
を返します。- 戻り値:
- インターセプターバインディングを構成する
AnnotatedTypeConfigurator
createInterceptedInstance
T createInterceptedInstance(T instance)
メソッド呼び出しがメソッドインターセプターによってインターセプトされ、指定されたインスタンスに転送されるラッパーインスタンスを返します。このメソッドは 1 回だけ呼び出す必要があります。その後の呼び出しでは
IllegalStateException
SE がスローされます。T が仕様のセクション 3.11 で定義されているようにプロキシできない場合、
UnproxyableResolutionException
例外がスローされます。このメソッドの前にignoreFinalMethods()
を呼び出すと、これらの制限が緩和されます。提供されたインスタンスが内部クライアントコンストラクト(クライアントプロキシなど)である場合、移植性のない動作が発生します。
- パラメーター:
instance
- 提供されたインスタンス- 戻り値:
- ラッパーインスタンス