2011-05-29 100 views
4

我在學習JSP和Servlet一段時間後,開始使用JSF進行Web開發。爲什麼在使用JSF Web應用程序時需要beans.xml?

當您創建JSF Web應用程序時,您總是(可能經常但不確定它是否總是)不得不創建beans.xml,並且您不會寫入任何內容。但是,如果該文件不存在,JSF Web應用程序將無法工作。

背後的原因是什麼?

爲什麼我們需要該文件?

請詳細解釋。

回答

3

添加到Micheal的答案中;由於注入支持,CDI不僅可以與JSF結合使用,還因爲它支持與EL(表達式語言)一起使用。這是JSF嚴重依賴的一個特性。

實際上,CDI bean幾乎可以完全替代JSF託管的bean,因此您會發現很多使用它們的示例以及大量的JSF書籍,建議使用它們。對於JSF應用程序,CDI bean有例如以下優點:

  1. 可以將較小的作用域注入較大的作用域。例如。請求作用域的GET參數可以注入到會話作用域bean中。這對於JSF託管的bean來說是不可能的。
  2. 可以利用對話範圍;產生多個不同頁面的範圍。

非常不幸的是,在JSF 2.0和2.1中,默認情況下CDI bean不支持非常方便的視圖範圍,儘管像Seam這樣的擴展可以添加這些範圍。 (更新:在JSF 2.2有,它與CDI豆工作一個新的視圖範圍)

總而言之JSF託管bean和CDI豆的方寸之間是這樣的,有一個爲這個JSF規範的問題,請參見http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-976

+0

我真的很感謝你們的幫助。由於我剛剛開始學習JSF,我無法得到依賴和注入的清晰想法(爲什麼需要它們?),CDI bean和託管bean之間的區別。這是因爲我迄今爲止所做的例子不需要依賴和注入。我希望當我瞭解他們時,我將能夠理解你們的回答。 – matiman 2011-05-29 23:11:50

+0

@ user636195:它是「依賴注入」,不是「和」 - 它是一種將依賴關係注入組件的機制,而不是讓組件負責獲取它們需要的東西(依賴關係)的引用。這是一個相當抽象的主題,但主要好處是提高了靈活性。託管bean實際上是一種(有點受限制的)依賴注入形式,一種是從一開始就是JSF的一部分,而CDI則是代表官方標準的更多功能豐富的形式,並不完全與JSF綁定。 – 2011-05-30 08:00:33

+0

CDI bean現在可以在Java EE 7中查看作用域(我認爲需要現在編輯答案)。 – Tiny 2015-04-16 11:10:44

4

beans.xml文件的存在標誌着應用程序使用JSR-299(上下文和依賴注入)的servlet容器 - 沒有它,應用程序的類也不會被CDI註釋掃描,依賴注入也不會執行。如果您不使用CDI(例如,您只使用普通的JSF託管的bean),則不需要beans.xml。如果你這樣做,你可以使用該文件(而不是註釋)來定義CDI配置 - 例如,這允許你提供一個測試配置,其中一些依賴被mock替代。

相關問題