我有一个想用 CDI bean 设置的 Tomcat 6 JSF Web 应用程序。不过,我将不得不逐渐将项目转换为 CDI。
我的问题是:CDI bean 和传统的 JSF 托管 bean 可以相互注入吗?
谢谢。
我有一个想用 CDI bean 设置的 Tomcat 6 JSF Web 应用程序。不过,我将不得不逐渐将项目转换为 CDI。
我的问题是:CDI bean 和传统的 JSF 托管 bean 可以相互注入吗?
谢谢。
所有 JSF 托管 bean (JMB) 要么自动成为 CDI 托管 bean (CMB),要么可以使用beans.xml标记文件来识别。(CMB 的要求设置得非常低,基本上只规定了非参数构造函数的存在。)
这意味着您应该能够几乎不费吹灰之力地使用(阅读:注入)所有 JMB。
但是,会出现问题,因为 JMB 使用与 CMB 不同的范围(javax.faces.*
vs. javax.enterprise.*
)
最好通过注册一个相对简单的 CDI 扩展来解决这些问题:当 CDI 服务器(对你来说是 Tomcat)启动时,它会引发一些你可以观察到的事件 - 这是你可以检测 JMB 并将它们转换为的地方正确范围的 CMB。
但在你开始破解之前: Seam 3 Faces 模块已经完成了所有这些工作。只需将它放在您的类路径中,所有 JSF 作用域都桥接到 CDI 作用域。