從零手寫(xiě)Spring(二):實(shí)例化Bean
前面我們已經(jīng)實(shí)現(xiàn)了一個(gè)最簡(jiǎn)單的容器,那么接下來(lái)我們將進(jìn)一步升級(jí)下。
設(shè)計(jì)
使用我們框架的人我們稱之為客戶端,我們框架要做的就是讓客戶端少做一些工作,然而之前的設(shè)計(jì)是讓客戶端來(lái)創(chuàng)建對(duì)象再交給容器,所以為了減輕客戶端的負(fù)擔(dān),我們要讓容器來(lái)為客戶端創(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í)例的過(guò)程使用了簡(jiǎn)單工廠模式。
簡(jiǎn)單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類。
工廠模式的目的:
1、解耦,將對(duì)象的使用和創(chuàng)建分開(kāi),解決對(duì)象間的依賴
2、隱藏復(fù)雜對(duì)象的創(chuàng)建過(guò)程,使用者只需要知道生產(chǎn)的接口即可
測(cè)試

對(duì)比和上一節(jié)的區(qū)別,我們這里并沒(méi)有自己通過(guò) new 關(guān)鍵詞來(lái)創(chuàng)建對(duì)象,卻可以從容器中拿到對(duì)象使用。
往期查看:
