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
を返します。
AnnotatedTypeConfigurator
T createInterceptedInstance(T instance)
このメソッドは 1 回だけ呼び出す必要があります。その後の呼び出しでは IllegalStateException
SE がスローされます。
T が仕様のセクション 3.11 で定義されているようにプロキシできない場合、UnproxyableResolutionException
例外がスローされます。このメソッドの前に ignoreFinalMethods()
を呼び出すと、これらの制限が緩和されます。
提供されたインスタンスが内部クライアントコンストラクト(クライアントプロキシなど)である場合、移植性のない動作が発生します。
instance
- 提供されたインスタンス Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.