今天早上抽空看來(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)和接口,工廠模式用的飛起...畢竟是大牛