Spring IOC實現(xiàn)思路

XML版本

核心類ClassPathXmlContextLoader的行為
  1. 讀取指定.xml結(jié)尾文件的內(nèi)容, 獲取beanId和class屬性.
  2. 創(chuàng)建一個Map, 將beanId作為key存入map中. 根據(jù)class的類路徑, 使用反射機制加載并新建類之后, 作為value存入map.

這里涉及到急加載和懶加載的實現(xiàn)

  • 急加載中, 直接根據(jù)class屬性使用反射加載
  • 懶加載中, value先存入class屬性, 也就是類路徑, 再到客戶端請求的時候再使用反射
交互

1.客戶端新建ClassPathXmlContextLoader加載xml文件
2.調(diào)用getBean(beanId)方法獲取map當中beanId對應(yīng)的value, 也就是我們的bean


Annotation版本

@ComponentScan核心步驟(IOC)
  1. 掃描指定包下所有類
  2. 判斷類上是否有相對應(yīng)注解, 返回class的集合
  3. 使用反射機制尋找出所有class的子包下面所有注解了@Component的類
  4. 使用反射機制初始化bean到容器中
@Resource核心步驟(DI)

1.使用反射機制, 獲取當前類所有屬性fields
2.判斷fields是否注解了@Resource
3.默認使用屬性名字作為beanId, 搜索容器中的bean
4.如果bean存在, 將bean賦值給field

  • 注意點
    在初始化完所有@Component的bean之后再初始化@Resource的屬性值. 避免有些屬性值獲取到?jīng)]有被初始化的bean, 報null
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,846評論 2 22
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 1.1 Spring IoC容器和bean簡介 本章介紹了Spring Framework實現(xiàn)的控制反轉(zhuǎn)(IoC)...
    起名真是難閱讀 2,670評論 0 8
  • 內(nèi)容過長,core部分分開發(fā)布,core章節(jié)第二部分點擊:Spring Framework 官方文檔中文版—Cor...
    kopshome閱讀 34,344評論 7 24
  • 小時候,家中書籍匱乏,最喜跟上父親一道兒去叔叔家串門。因為叔叔家的書櫥中有精美的童話書,在那兒我可以看上一整天!書...
    沙漠清泉1987閱讀 494評論 0 2

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