2

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

4

1 に答える 1