Spring中BeanFactory和ApplicationContext 的區別
作者:[Zoltan Raffai]
譯者:FraserYu
我看到很多問題詢問 BeanFactory 和 ApplicationContext 之間的區別。伴隨而來,我有一個問題:我應該使用前者還是後者來從 Spring 容器中獲取 beans。
我們之前 在這裡 討論過 Spring 容器。 基本上這兩個介面提供從容器中獲取 Spring beans 的方式, 但是有一些明顯的差異。
讓我們看一看!
什麼是 Spring Beans?
這是一個非常簡單,通常又很複雜的問題。通常情況,Spring beans 是被 Spring 容器管理的 Java 對象.
這裡是一個簡單的 Spring bean 示例:
在基於 XML 的配置中,beans.xml為Spring 容器管理 bean 提供了原數據。
什麼是 Spring 容器?
Spring 容器負責實例化,配置,裝配 Spring beans。 這裡是一個如何為控制反轉容器配置 HelloWorld POJO 的示例
現在它被 Spring 容器管理, 問題是: 我們如何訪問它?
BeanFactory 和 ApplicationContext 的區別
The BeanFactory 介面
這是個訪問 Spring 容器的根介面。 為訪問 Spring 容器,我們將使用 Spring 的依賴注入功能使用這個 BeanFactory 介面和它的子介面。
功能:
Bean 實例化/關聯
通常,它的實現是懶載入方式,這意味著當我們直接通過調用 方法時 bean 才會實例化。
最常使用的實現BeanFactory的 API 是XmlBeanFactory.
這裡是一個如何通過 BeanFactory 獲取一個 bean 的示例:
ApplicationContext 介面
在 Spring 應用中,ApplicationContext是中心介面,用於為應用提供配置信息。
它實現 BeanFactory 介面,因此,ApplicationContext 包含 BeanFactory的所有功能,甚至更多!它的主要功能是大業務應用的創建。
功能:
Bean 實例化/關聯
自動的 BeanPostProcessor 註冊
自動的 BeanFactoryPostProcessor 註冊
方便的 MessageSource 訪問(i18n)
應用事件發布
它使用預載入方式,所以 ApplicationContext 啟動後會實例化每個 bean。
這裡是ApplicationContext使用示例:
總結
ApplicationContext包含BeanFactory的所有功能。通常推薦使用前者,有一些限制情形,比如在移動應用中,對內存消費比較嚴苛。在那些情形中將會合理的使用更輕量級的BeanFactory。 然而, 在大多數企業應用中,ApplicationContext將會是你想使用的。
本文由spring4all.com翻譯小分隊創作,採用 知識共享-署名-非商業性使用-相同方式共享 4.0 國際 許可 協議進行許可。
※譯:Spring Cloud Config:Git 後端
※譯:什麼是 Spring Boot?
TAG:SpringForAll社區 |