spring DI

今天早上抽空看來(lái)一下spring依賴(lài)注入的源碼,在這里記錄一下它的調(diào)用流程吧

依賴(lài)注入實(shí)現(xiàn)原理

??實(shí)質(zhì)上就是new一個(gè)對(duì)象,并給其屬性賦值(setter注入和構(gòu)造器注入)
??那么落實(shí)到spring是怎么實(shí)現(xiàn)的呢?
??首先它是先調(diào)用getBean方法, 然后getBean又調(diào)用了doGetBean方法,然后在其中調(diào)用了createBean方法,創(chuàng)建過(guò)程后委托給了doCreateBean。所以實(shí)際上最重要的方法就是doCreateBean。
??在doCreateBean有兩個(gè)方法(1)createBeanInstance,作用是生成Java對(duì)象。(2)populateBean完成注入。
??在createBeanInstance中創(chuàng)建對(duì)象的方式有兩種,BeanUtil和Cglib,前者是又java反射實(shí)現(xiàn)的,后者是對(duì)字節(jié)碼加強(qiáng)的一種方式。
??在populateBean中調(diào)用appPropertyValues中進(jìn)行注入,獲取BeanDefinition中的屬性信息然后給屬性賦值。這樣一個(gè)依賴(lài)注入的過(guò)程就完成了。
??不過(guò)如果讓我設(shè)計(jì)我肯定不會(huì)寫(xiě)成這樣,它弄了好多抽象類(lèi)和接口,工廠模式用的飛起...畢竟是大牛

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,861評(píng)論 2 22
  • 內(nèi)容過(guò)長(zhǎng),core部分分開(kāi)發(fā)布,core章節(jié)第二部分點(diǎn)擊:Spring Framework 官方文檔中文版—Cor...
    kopshome閱讀 34,369評(píng)論 7 24
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評(píng)論 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,968評(píng)論 1 92
  • 之前第一次看《皮囊》的時(shí)候,是兩年前了。 那時(shí)候沒(méi)有太多感受,就是平平常常的故事編織起某個(gè)人的一生,并從各個(gè)人物的...
    Hollyiiiee閱讀 387評(píng)論 0 0

友情鏈接更多精彩內(nèi)容