首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyFaces CODI两次实例化bean

MyFaces CODI两次实例化bean
EN

Stack Overflow用户
提问于 2013-06-12 07:21:57
回答 2查看 232关注 0票数 0

我正在将JSF2.1应用程序迁移到CDI。为了能够使用@javax.faces.bean.ViewScoped注释,我尝试使用MyFaces CODI,正如建议的here

应用程序似乎按预期工作,但我通过日志记录注意到,当我第一次访问@Named bean时,每个bean的构造函数都会被调用两次。但是,它们使用@PostConstruct注释的@PostConstruct方法只执行一次。

当第二次或第九次使用这些bean时,它们的构造函数只能按照通常的预期调用一次。

当我从我的应用程序中删除MyFaces CODI jars时,它就不会发生,所以我确信它是由它引起的。

这是正常的行为吗?如果是的话,为什么?它对性能有影响吗?这会不会造成任何问题?

我觉得这可以与代理创建联系起来,但在我的脑海中并不是100%清晰,所以我非常希望得到一个解释。

我的配置:

  • JSF 2.1
  • Mojarra 2.1.6
  • MyFaces CODI 1.0.5 (用完整的包或核心+ JSF 2.0+测试)
  • (无关: Primefaces 3.5和Omnifaces 1.5)
  • 也在Jboss 6.0上进行了测试,结果相同

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-06-12 10:39:29

是的,它与代理创建有关,它是CDI的预期行为。请看这个https://community.jboss.org/blogs/stuartdouglas/2010/10/12/weld-cdi-and-proxies,因为您可能会找到其他解释,说明同样的事情。

但是关于为什么在@javax.faces.bean.ViewScoped和CODI中发生这种情况,这是因为CODI激活了一个CDI扩展,它用JSF ViewScope扫描bean,并在运行时用它们自己的基于CDI的实现替换它。

票数 3
EN

Stack Overflow用户

发布于 2013-06-12 22:12:52

@rdcrng是正确的。

使用CDI时,您需要@PostConstruct方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17059810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档