我有一个Tomcat 6 JSF Web应用程序,我想用CDI bean设置它。我将不得不逐渐将项目转换为CDI。
我的问题是:可以将CDI bean和传统的JSF托管bean互相注入吗?
感谢。
答案 0 :(得分:4)
所有JSF托管bean(JMB)都是自动CDI托管bean(CMB),或者可以使用 beans.xml 标记文件识别。 (CMB的要求设置得非常低,基本上只需要existence of a non-parameter constructor。)
这意味着您应该能够使用(读取:注入)所有JMB,几乎不需要额外的努力。
然而,问题将会出现,因为JMB使用的范围与CMB不同(javax.faces.*
与javax.enterprise.*
)
通过注册相对简单的CDI扩展可以最好地解决这些问题:当CDI服务器(Tomcat for you)启动时,它会引发一些您可以观察到的事件 - 这是您可以检测JMB和将它们转换为正确范围的CMB。
但是在你开始攻击之前:所有这些都已经由Seam 3 Faces module完成了。只需将它放在类路径中,所有JSF范围都桥接到CDI范围。