CDI托管bean和JSF托管bean可以相互通信吗?

Jon*_*ott 5 jsf java-ee cdi jsf-2 managed-bean

我有一个Tomcat 6 JSF Web应用程序,我想用CDI bean设置它.我将不得不逐渐将项目转换为CDI.

我的问题是:CDI bean和传统的JSF托管bean可以相互注入吗?

谢谢.

jan*_*oth 4

所有 JSF 托管 Bean (JMB) 要么自动成为 CDI 托管 Bean (CMB),要么可以使用beans.xml标记文件来识别。(CMB 的要求设置得非常低,基本上只是规定了无参数构造函数的存在。)

这意味着您应该能够使用(读:注入)所有 JMB,几乎不需要额外的努力。

但是,由于 JMB 使用的范围与 CMB 不同(javax.faces.*对比javax.enterprise.*) ,因此会出现问题

这些问题最好通过注册一个相对简单的 CDI 扩展来解决:当 CDI 服务器(Tomcat)启动时,它将引发一些您可以观察到的事件 - 这是您可以检测 JMB 并将其转换为的地方正确确定 CMB 范围。

但在您开始破解之前:所有这些都已由Seam 3 Faces 模块完成。只需将其放入类路径中,所有 JSF 作用域都会桥接到 CDI 作用域。