什么是容器?
JavaEE原話:“
Containers are the interface between a
component and the low-level platform-specific functionality that
supports the component. ”
翻譯過來就是“容器就是底層的、與支撐平臺相關的、對組件進行功能化支持的接口”。
難以理解?
通俗的解釋就是,容器是一系列為了實現分層的概念而定義的一系列功能的平臺無關的標準。它的主要用處就是平臺無關性和底層操作封裝性(Java的核心哲學)。
說白了,容器就是
Java的核心哲學在企業級應用范圍內的具體實現。
那么使用容器,能給我們帶來多大的好處呢?
- 強制性分層:通過Java的接口定義機制和強類型編譯器的支持,在底層就實現了分層的概念。即使頂層的實現十分沒有經驗,底層的分層還是可以辨認的。
- 底層操作封裝:以服務端應用服務器為中心的三層企業開發涉及到的技術相當麻煩和復雜,但是之間又有相當多的共性,所以進行有效的底層次的封裝是可行的而且是有必要的。這樣開發人員的工作就可以建立在一個穩固的基礎上,而不是靠自己的經驗去應對這些問題。
- 平臺無關性:這個也是Java的核心哲學,至于好處嗎,我就不多說了
- 代碼的重用可能性提高:記住,是可能性。具體的重用性要看開發的方式和開發后代碼的質量。
就JavaEE而言,它的標準里面只有WEB容器和EJB容器,這兩個容器已經充分體現了它們的概念。
但是,還有一種概念上的容器,它的概念與上述概念不同,所以被稱作輕量級容器。
首先,輕量級容器不是接口的抽象,沒有JavaEE概念中的部署和移除,從概念上說輕量級容器就是一個擁有IOC支持的Bean工廠。
從形象的角度上來看,輕量級容器是一個盒子,盒子里面裝滿了貼有標簽的JavaBean,對外界而言,它是一個魔盒,只要給它一個咒語(咒語必須正確),它就能給你一個禮物。
輕量級容器目前而言沒,有相應的標準,但是它的使用范圍卻比真正的JavaEE標準要寬泛得多(誰不喜歡禮物呢?)。
- 首先,它是一個非常好的JavaBean工廠(誰沒用過工廠模式?)
- 其次,它能夠給你的代碼帶來IOC支持(懶人最喜歡的生活方式莫過于東西自己來找它)
- 再次,一般來說,輕量級容器都可以通過動態代理和字節碼增強的方式提供AOP的支持
總而言之,輕量級容器是JavaEE容器概念的一種有力補充,它的用法更加靈活,適用的范圍更廣,從目前的經驗上看,開發、測試和管理起來也要比標準容器對象開發起來簡單。
-
輕量級容器一般不會給你提供分布式和集群的支持,因為它的優點就是靈活而不笨重。
-
輕量級容器就像作漢堡的那兩塊面包,你想吃什么就往里夾,但是漢堡好吃不好吃,主要就在你放進去的東西和搭配的手藝。
-
輕量級容器不能強制的要求你分層
- 輕量級容器的底層封裝一般以模塊加載進容器的方式實現。
-
有的人不愛吃漢堡。
總體評價:
容器是Java的核心哲學的體現,而輕量級容器則是工程師開發文化的體現,它可以很靈活的幫助你,對你沒有什么具體的要求。二者不會出現誰替代誰的情況。具體的使用方式,還得看你在設計時所處的情況。
更正一下:
就JavaEE而言,它的標準里面只有WEB容器和EJB容器是對它的服務端而言的。客戶端還有Application Container和Applet Container兩個容器。