我已经仔细阅读了 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 拦截器和 @ViewScoped bean有关,但实际上我的拦截器正在以正常方法工作。