Seam/Weld ドキュメントのインターセプターに関する記事を注意深く読み、以下を実装しましたInterceptorBinding
。
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyLog {}
そしてInterceptor
クラス:
@MyLog @Interceptor
public class ErpLogInterceptor implements Serializable
{
@AroundInvoke
public Object logMethodEntry(InvocationContext invocationContext) throws Exception
{..}
@PostConstruct
public Object logPostConstruct(InvocationContext invocationContext) throws Exception
{...}
}
@Named @ViewScoped
いいえ、 Beanでインターセプターをアクティブにしようとしました:
@javax.inject.Named;
@javax.faces.bean.ViewScoped
public class MyBean implements Serializable
{
@PostConstruct @MyLog
public void init()
{...}
@MyLog public void toggleButton()
{..}
}
JSF ページでボタンを押すと、メソッドtoggleButton
が正しく呼び出され、 Interceptor メソッドlogMethodEntry
が呼び出されます。しかし、メソッド@PostConstruct
(私が興味を持っている)が私のクラスによって傍受されることは決してないようです。
質問はJava EE Interceptors と @ViewScoped Beanに関連しているようですが、実際には私のインターセプターは通常の方法で動作しています。