異同
- 兩者都是通過xml配置文件加載bean,ApplicationContext繼承了BeanFacotry接口,而且還繼承了其他接口。所以ApplicationContext和BeanFacotry相比,提供了更多的擴展功能。
- BeanFactory是延遲加載,如果Bean的某一個屬性沒有注入,BeanFacotry加載后,直至第一次使用
調(diào)用getBean()
才對該Bean進行加載實例化,這樣,我們就不能發(fā)現(xiàn)一些存在的Spring的配置問題。 - 而ApplicationContext則相反,它是在容器啟動時,一次性創(chuàng)建了所有的Bean。這樣,在容器啟動時,我們就可以發(fā)現(xiàn)Spring中存在的配置錯誤。
在實際開發(fā)中用BeanFactory還是ApplicationContext ?
ApplicationContext包含了BeanFactory的所有功能。通常建議比BeanFactory優(yōu)先。
如果你選擇BeanFactory則無法使用相當多的支持功能,如事務和AOP,這可能會導致混亂,因為配置并沒有錯誤。
所以一般在開發(fā)中選擇使用ApplicationContext。
總結(jié)
- BeanFactory當需要調(diào)用時才讀取配置信息,生成某個類的實例。如果讀入的Bean配置正確,則其他的配置中有錯誤也不會影響程序的運行。
- ApplicationContext 在初始化時就把 xml 的配置信息讀入內(nèi)存,對 XML 文件進行檢驗,如果配置文件沒有錯誤,就創(chuàng)建所有的Bean ,直接為應用程序服務。相對于基本的BeanFactory,ApplicationContext 唯一的不足是占用內(nèi)存空間。當應用程序配置Bean較多時,程序啟動較慢。