Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 MyFaces CODI实例化bean两次_Jsf 2_Cdi_Myfaces_Codi - Fatal编程技术网

Jsf 2 MyFaces CODI实例化bean两次

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时,这种情况就不

我正在将JSF2.1应用程序迁移到CDI。为了能够使用
@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方法。

感谢文章链接,我会非常感兴趣地阅读。感谢文章链接,我会非常感兴趣地阅读。