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に関連しているようですが、実際には私のインターセプターは通常の方法で動作しています。