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

全國(guó)咨詢/投訴熱線:400-618-4000

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

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

好口碑IT培訓(xùn)

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

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

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

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

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

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

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

BeanFactory與ApplicationContext的關(guān)系

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

BeanFactory與ApplicationContext的關(guān)系

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

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

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

0 分享到:
和我們?cè)诰€交談!