作為一個容器,通過配置文件或者注解描述類與類之間的依賴關(guān)系,自動完成類的初始化和依賴注入的工作
Spring的核心組成部分
反射
通過程序化的方式間接對Class對象實例操作谈飒,Class文件由類裝載器裝載后,在JVM中將形成一份描述Class結(jié)構(gòu)的元信息對象态蒂,通過該元信息對象可以獲知Class的結(jié)構(gòu)信息杭措,如構(gòu)造函數(shù)、屬性钾恢、方法等手素。
主要成員
Constructor
通過newInstance獲取對象類的實例
Method
提供方法的調(diào)用
Field
獲取成員變量
類裝載器
尋找類的字節(jié)碼文件并構(gòu)造出類在JVM內(nèi)部表示的對象組件,主要工作由ClassLoader及其子類負(fù)責(zé)瘩蚪。
傳值方式
- 構(gòu)造函數(shù)傳參
- set方法傳參
從傳值方式衍生出來的反射方式如下所示
反射方式1
- 通過類加載器獲取目標(biāo)對象
- 獲取類的默認(rèn)構(gòu)造器對象并實例化目標(biāo)對象
- 通過反射方法設(shè)置屬性
反射方式2
- 通過類加載器獲取目標(biāo)對象
- 獲取類的帶有參數(shù)的構(gòu)造器對象
- 使參數(shù)的構(gòu)造器對象實例化目標(biāo)對象
對象工廠的初始化
- 創(chuàng)建讀取配置文件的SAXReader
- 獲取當(dāng)前線程中的類裝載器的對象
- 利用類裝載器從classpath的xml路徑下獲取指定的xml文件
- 通過xml文件獲取對應(yīng)bean的id(唯一標(biāo)識)盛险、class(類全路徑)、name(屬性)暇番、value(屬性值)
- 通過反射方法將value設(shè)置到類的屬性當(dāng)中
- 將對象放入beanMap當(dāng)中噩翠,key為id
通過對象工廠獲取bean
- 初始化對象工廠
- 調(diào)用init方法
- 從beanMap中根據(jù)ID獲取bean
SpringIOC
將實現(xiàn)類、參數(shù)信息配置在對應(yīng)的配置文件中言沐,Spring的工廠類會幫我們完成配置文件的讀取邓嘹、利用反射機(jī)制注入對象。