gpt4 book ai didi

java - 未调用带有@Named @ViewScoped 的@PostConstruct 拦截器

转载 作者:行者123 更新时间:2023-11-29 09:09:09 25 4
gpt4 key购买 nike

我仔细阅读了关于Interceptors的文章在 Seam/Weld 文档中并实现了一个 InterceptorBinding:

@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyLog {}

和一个拦截器类:

@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 将被正确调用,并且拦截器方法 logMethodEntry 被调用。但似乎方法 @PostConstruct(我感兴趣)从未被我的类拦截。

问题似乎与Java EE Interceptors and @ViewScoped bean有关但实际上我的拦截器在正常方法中工作。

最佳答案

您应该将@PostConstruct 拦截器的返回类型设置为void 而不是Object。变化:

  @PostConstruct
public Object logPostConstruct(InvocationContext invocationContext) throws Exception
{...}

到:

  @PostConstruct
public void logPostConstruct(InvocationContext invocationContext) throws Exception
{...}

关于java - 未调用带有@Named @ViewScoped 的@PostConstruct 拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13283906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com