從零手寫Spring(二):實(shí)例化Bean
前面我們已經(jīng)實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的容器,那么接下來我們將進(jìn)一步升級(jí)下。
設(shè)計(jì)使用我們框架的人我們稱之為客戶端,我們框架要做的就是讓客戶端少做一些工作,然而之前的設(shè)計(jì)是讓客戶端來創(chuàng)建對(duì)象再交給容器,所以為了減輕客戶端的負(fù)擔(dān),我們要讓容器來為客戶端創(chuàng)建對(duì)象。這時(shí)我們只要告訴容器,我們要的是什么類型的對(duì)象,容器便會(huì)幫助客戶端創(chuàng)建這個(gè)對(duì)象。
(資料圖)
于是我們有了如下設(shè)計(jì):
1、創(chuàng)建一個(gè)新的對(duì)象用于包裝要?jiǎng)?chuàng)建的類的類型
2、在客戶端使用對(duì)象時(shí),容器去實(shí)例化對(duì)象
實(shí)現(xiàn)BeanDefinition 定義將實(shí)例化交給容器做,其實(shí)可以將上節(jié)中 beanMap 中的值由 Object改為Class即可,但是為了以后的可擴(kuò)展性,這里將Class包裝成一個(gè)新的BeanDefinition類。比如以后可以在這個(gè)類中標(biāo)記 beanClass 是否單例、是否懶加載、注入的方式等信息。
BeanFactory 定義BeanFactory 就是上節(jié)中的 SpringContainer,為什么要改為BeanFactory 呢?
原因是:這個(gè)創(chuàng)建對(duì)象實(shí)例的過程使用了簡(jiǎn)單工廠模式。
測(cè)試簡(jiǎn)單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類。
工廠模式的目的:
1、解耦,將對(duì)象的使用和創(chuàng)建分開,解決對(duì)象間的依賴
2、隱藏復(fù)雜對(duì)象的創(chuàng)建過程,使用者只需要知道生產(chǎn)的接口即可
對(duì)比和上一節(jié)的區(qū)別,我們這里并沒有自己通過 new關(guān)鍵詞來創(chuàng)建對(duì)象,卻可以從容器中拿到對(duì)象使用。
往期查看:
手?jǐn)]Spring(一):創(chuàng)建簡(jiǎn)單容器
關(guān)鍵詞: 創(chuàng)建對(duì)象 工廠模式 一個(gè)新的
相關(guān)閱讀
-
從零手寫Spring(二):實(shí)例化Bean
前面我們已經(jīng)實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的容器,那么接下來我們將進(jìn)一步升級(jí)... -
全球觀察:吳恩達(dá)機(jī)器學(xué)習(xí)課程代碼作業(yè)-...
吳恩達(dá)老師的機(jī)器學(xué)習(xí)課程作業(yè)是MATLAB版本(Octave)的,現(xiàn)在有點(diǎn)... -
一種用于IDC機(jī)房數(shù)據(jù)挖掘的應(yīng)用實(shí)現(xiàn)
(作者單位:華北石油通信有限公司)摘要:介紹了適用于數(shù)據(jù)中心可... -
視覺-語言預(yù)訓(xùn)練入門指南_天天熱點(diǎn)
Datawhale干貨作者:張義杰單位:中國移動(dòng)云能力中心前言視覺-語言(... -
關(guān)于付費(fèi)咨詢 實(shí)時(shí)焦點(diǎn)
經(jīng)常會(huì)有讀者粉絲朋友加微信過來咨詢一些技術(shù)相關(guān)的問題,一般情況... -
請(qǐng)立即卸載反華病毒軟件Notepad++ 天天熱文
Notepad++是一款老牌知名代碼編輯器軟件,有大批的程序員受眾。在Gi...