一.概念
ioc :inversion of control控制反轉,控制反轉的意思是,之前我們的思路都是創建對象的時候,由我們自己主動去new對象,而ioc就是將new 對象的任務交給了ioc容器,我們只需要告訴ioc容器我們需要的對象,然後ioc提供給我們
而di dependcy,依賴注入,就是ioc容器創建業務所需要的類並交給我們;
二.原理
https://blog.csdn.net/lisongjia123/article/details/52129340
https://blog.csdn.net/qq_27888773/article/details/77770519
1.創建Ioc配置文件的抽象資源,這個抽象資源包含了BeanDefinition的定義信息
2.創建一個BeanFactory,這裏使用了DefaultListableBeanFactory
3.創建一個載入BeanDefinition的讀取器,這裏使用XmlBeanDefinitionReader來載入XML文件形式的BeanDefinition
4.然後將上面定位好的Resource,通過一個回調配置給BeanFactory
5.從定位好的資源位置讀入配置信息,具體的解析過程由XmlBeanDefinitionReader完成
6.完成整個載入和註冊Bean定義之後,需要的Ioc容器就初步建立起來了
最終封裝成,BeanDefinition,並且放在BeanFacatory中,有map來管理;
實例化的過程,也就依賴注入是spring底層通過getbean爲入口,底層Spring當中提供了兩種實例化方案: BeanUtils 和 Cglib 方式。BeanUtils實現機制是通過Java的反射機制,Cglib是一個第三方類庫採用的是一種字節碼加強方式機制。 Spring中採用的默認實例化策略是Cglib。
另外,實例化之後,依賴注入,利用的setPropertyValue()方法;