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

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

怎樣描述BeanFactory與ApplicationContext的關(guān)系?

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

好口碑IT培訓(xùn)

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

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

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

ApplicationContext內(nèi)部還維護(hù)著BeanFactory的引用,所以,ApplicationContext與BeanFactory既有繼承關(guān)系,又有融合關(guān)系。

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

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

BeanFactory與ApplicationContext的關(guān)系圖如下:

BeanFactory與ApplicationContext的關(guān)系

applicationContext內(nèi)部維護(hù)著beanFactory的引用,在學(xué)習(xí)過程中會查看beanFactory內(nèi)部維護(hù)的屬性,斷點查看如下圖示內(nèi)容的。

BeanFactory與ApplicationContext的關(guān)系

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

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

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

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