教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

怎樣描述BeanFactory與ApplicationContext的關系?

更新時間:2022年12月28日10時25分 來源:傳智教育 瀏覽次數:

好口碑IT培訓

BeanFactory是Spring的早期接口,稱為Spring的Bean工廠,ApplicationContext是后期更高級接口,稱之為Spring 容器;

ApplicationContext在BeanFactory基礎上對功能進行了擴展,例如:監(jiān)聽功能、國際化功能等。BeanFactory的API更偏向底層,ApplicationContext的API大多數是對這些底層API的封裝;

Bean創(chuàng)建的主要邏輯和功能都被封裝在BeanFactory中,ApplicationContext不僅繼承了BeanFactory,而且

ApplicationContext內部還維護著BeanFactory的引用,所以,ApplicationContext與BeanFactory既有繼承關系,又有融合關系。

Bean的初始化時機不同,原始BeanFactory是在首次調用getBean時才進行Bean的創(chuàng)建,而ApplicationContext則是配置文件加載,容器一創(chuàng)建就將Bean都實例化并初始化好。

ApplicationContext除了繼承了BeanFactory外,還繼承了ApplicationEventPublisher(事件發(fā)布器)、ResouresPatternResolver(資源解析器)、MessageSource(消息資源)等。但是ApplicationContext的核心功能還是BeanFactory。

BeanFactory與ApplicationContext的關系圖如下:

BeanFactory與ApplicationContext的關系

applicationContext內部維護著beanFactory的引用,在學習過程中會查看beanFactory內部維護的屬性,斷點查看如下圖示內容的。

BeanFactory與ApplicationContext的關系

驗證BeanFactory和ApplicationContext對Bean的初始化時機,在UserDaoImpl的無參構造內打印一句話,驗證構造方法的執(zhí)行時機。

public class UserDaoImpl implements UserDao {
    public UserDaoImpl() {
        System.out.println("UserDaoImpl創(chuàng)建了...");
    }
}

斷點觀察,BeanFactory方式時,當調用getBean方法時才會把需要的Bean實例創(chuàng)建,即延遲加載;而 ApplicationContext是加載配置文件,容器創(chuàng)建時就將所有的Bean實例都創(chuàng)建好了,存儲到一個單例池中,當調用getBean時直接從單例池中獲取Bean實例返回。

0 分享到:
和我們在線交談!