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());
}
このクラスのインスタンスは、再利用もスレッド間の共有にも適していません。
| 修飾子と型 | メソッドと説明 |
|---|---|
AnnotatedTypeConfigurator<T> | configure()BeanManager.createInterceptionFactory(CreationalContext, Class) に渡されるクラス用に作成された、または InterceptionFactory パラメーターインジェクションポイントから派生した AnnotatedType で初期化された AnnotatedTypeConfigurator を返します。 |
T | createInterceptedInstance(T instance) メソッド呼び出しがメソッドインターセプターによってインターセプトされ、指定されたインスタンスに転送されるラッパーインスタンスを返します。 |
InterceptionFactory<T> | ignoreFinalMethods()createInterceptedInstance(Object) の呼び出し中にインターセプトされたインスタンスの型階層のクラスによって宣言された public、protected、default の可視性を持つすべての非静的な final メソッドを無視するようにコンテナーに指示します。 |
InterceptionFactory<T> ignoreFinalMethods()
createInterceptedInstance(Object) の呼び出し中にインターセプトされたインスタンスの型階層のクラスによって宣言された public、protected、default の可視性を持つすべての非静的な final メソッドを無視するようにコンテナーに指示します。 無視されたメソッドは、createInterceptedInstance(Object) によって作成されたラッパーインスタンスで呼び出されるべきではありません。そうしないと、予期しない動作が発生します。
AnnotatedTypeConfigurator<T> configure()
BeanManager.createInterceptionFactory(CreationalContext, Class) に渡されるクラス用に作成された、または InterceptionFactory パラメーターインジェクションポイントから派生した AnnotatedType で初期化された AnnotatedTypeConfigurator を返します。Configurator では、インターセプターを createInterceptedInstance(Object) によって返されるラッパーインスタンスに関連付けるために使用されるインターセプターバインディングを追加または削除できます。
各呼び出しは同じ AnnotatedTypeConfigurator を返します。
AnnotatedTypeConfiguratorT createInterceptedInstance(T instance)
このメソッドは 1 回だけ呼び出す必要があります。その後の呼び出しでは IllegalStateExceptionSE がスローされます。
T が仕様のセクション 3.11 で定義されているようにプロキシできない場合、UnproxyableResolutionException 例外がスローされます。このメソッドの前に ignoreFinalMethods() を呼び出すと、これらの制限が緩和されます。
提供されたインスタンスが内部クライアントコンストラクト(クライアントプロキシなど)である場合、移植性のない動作が発生します。
instance - 提供されたインスタンス Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.