为什么在使用JSF Web应用程序时需要bean.xml?

mat*_*man 5 javabeans jsf-2

在学习了一段时间的JSP和Servlet之后,我开始使用JSF进行Web开发。

当您创建JSF Web应用程序时,您总是(可能经常,但是我不确定是否总是)必须创建beans.xml,并且您无需在其中编写任何内容。但是,如果该文件不存在,JSF Web应用程序将无法运行。

背后的原因是什么?

为什么我们需要该文件?

请详细解释。

Arj*_*jms 4

添加迈克尔的答案;CDI 不仅因为注入支持而与 JSF 结合使用,而且还因为它支持与 EL(表达式语言)一起使用。这是 JSF 严重依赖的一个功能。

事实上,CDI bean 几乎可以完全取代 JSF 托管 bean,因此您会发现大量使用它们的示例以及大量建议使用它们的 JSF 书籍。对于 JSF 应用程序,CDI beans 具有以下优点:

  1. 可以将较小的范围注入到较大的范围中。例如,请求范围的 GET 参数可以注入到会话范围的 bean 中。这对于 JSF 托管 Bean 来说是不可能的。
  2. 可以利用谈话范围;产生多个不同页面的范围。

非常不幸的是,在 JSF 2.0 和 2.1 中,CDI beans 默认不支持极其方便的视图范围,尽管像 Seam 这样的扩展可以添加这些视图范围。(更新:在 JSF 2.2 中,有一个新的视图范围可以与 CDI beans 一起使用)

总而言之,JSF 托管 bean 和 CDI bean 之间的混淆导致存在 JSF 规范问题,请参阅http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-976