Jsf 2 MyFaces CODI实例化bean两次
我正在将JSF2.1应用程序迁移到CDI。为了能够使用Jsf 2 MyFaces CODI实例化bean两次,jsf-2,cdi,myfaces,codi,Jsf 2,Cdi,Myfaces,Codi,我正在将JSF2.1应用程序迁移到CDI。为了能够使用@javax.faces.bean.ViewScoped注释,我尝试使用MyFacesCodi,正如建议的那样 该应用程序似乎按预期工作,但我通过日志记录注意到,当我第一次访问它时,每个名为@的bean的构造函数都会被调用两次。但是,它们的init()方法用@PostConstruct注释,只执行一次 当这些bean被第二次或第n次使用时,它们的构造函数通常只被调用一次 当我从我的应用程序中删除MyFaces CODI JAR时,这种情况就不
@javax.faces.bean.ViewScoped
注释,我尝试使用MyFacesCodi,正如建议的那样
该应用程序似乎按预期工作,但我通过日志记录注意到,当我第一次访问它时,每个名为@的bean的构造函数都会被调用两次。但是,它们的init()
方法用@PostConstruct
注释,只执行一次
当这些bean被第二次或第n次使用时,它们的构造函数通常只被调用一次
当我从我的应用程序中删除MyFaces CODI JAR时,这种情况就不会发生,所以我确信这是由它引起的
这是正常的行为吗?如果是,为什么?它是否会对性能产生影响,或者会导致任何问题
我觉得这可能与代理创建有关,但在我的脑海中还不是100%清楚,所以我非常感谢您的解释
我的配置:
- JSF2.1
- 莫哈拉2.1.6
- MyFaces CODI 1.0.5(使用完整捆绑包或核心+JSF 2.0+进行测试)
- (无关:Primefaces 3.5和Omnifaces 1.5)
- Glassfish 3.1.2,也在Jboss EAP 6.0上进行了测试,结果相同
谢谢。是的,它与代理创建有关,这是CDI的预期行为。看看这个,因为你可能会找到其他解释,说同样的事情
但是关于@javax.faces.bean.ViewScoped和CODI为什么会发生这种情况,这是因为CODI激活了一个CDI扩展,它用JSF ViewScope扫描bean,并在运行时用它们自己的基于CDI的实现替换它。是的,它与代理创建有关,这是CDI的预期行为。看看这个,因为你可能会找到其他解释,说同样的事情 但至于@javax.faces.bean.ViewScoped和CODI为什么会发生这种情况,那是因为CODI激活了一个CDI扩展,它用JSF ViewScope扫描bean,并在运行时用它们自己的基于CDI的实现替换它。@rdcrng是正确的 使用CDI时,您需要@PostConstruct方法。@rdcrng是正确的
使用CDI时,您需要@PostConstruct方法。感谢文章链接,我会非常感兴趣地阅读。感谢文章链接,我会非常感兴趣地阅读。