我準(zhǔn)備戰(zhàn)斗到最后叛本,不是因為我勇敢,是我想見證一切彤钟。 --雙雪濤《獵人》
[TOC]
Thinking
- 一個技術(shù)来候,為什么要用它,解決了那些問題逸雹?
- 如果不用會怎么樣营搅,有沒有其它的解決方法?
- 對比其它的解決方案梆砸,為什么最終選擇了這種转质,都有何利弊?
- 你覺得項目中還有那些地方可以用到帖世,如果用了會帶來那些問題休蟹?
- 這些問題你又如何去解決的呢?
本文主要基于 Spring 5.2.7.BUILD-SNAPSHOT
春天這么春天日矫,冬天還會遠(yuǎn)嗎赂弓?Fuker!D慕巍盈魁!
提到Spring 總是第一時間想到它的集大成者,優(yōu)雅且高效窃诉,提供的各種好用的功能备埃,Ioc,DI等褐奴。
其實看似非常智能的
Spring
按脚,做的每一步,都是各種代碼配合著敦冬,勤勤懇懇的在底層工作著辅搬。
1、Spring核心組件裝配流程解析
首先思考一下脖旱,Spring要想實現(xiàn)所有的功能堪遂。如果是你,具體要做什么萌庆,
- 首先要讀取配置文件吧(不管是xml還是注解溶褪,都要獲取到該讀取的配置文件吧!)
- 讀取到配置文件之后呢践险?要加載解析吧
- 解析完成猿妈,才能做具體的操作吧
那么來看看spring具體的做法鴨4盗狻!彭则!
1.1鳍刷、Spring核心組件裝配流程文字解釋
- 需要將bean的定義信息聲明在Spring的配置文件中。(運行代碼之前)
- 需要通過Spring抽象出各種Resource來指定對應(yīng)的配置文件俯抖。
- 需要顯式申明一個Spring工廠输瓜,該工廠用來掌控我們在配置文件中鎖聲明的各種bean以及bean之間的依賴關(guān)系與注入關(guān)系
- 需要定義一個配置信息讀取器,該讀取器用來讀取之前所定義的bean配置文件信息
- 讀取器的作用是讀取我們所聲明的配置文件信息芬萍,并且將讀取后的信息裝配到之前所有聲明的工廠當(dāng)中
- 需要將讀取器與工廠以及資源對象進(jìn)行相應(yīng)的關(guān)聯(lián)處理尤揣。
- 工廠管理的全部對象裝配完畢,可以供客戶端直接調(diào)用柬祠,獲取客戶端想要使用的各種bean對象
總結(jié)為一下三個步驟
- 資源抽象
- 工廠
- 配置信息讀取器
Spring 將上述的所有功能都抽取出來芹缔,在
2001
年的時候就有如此優(yōu)秀且先進(jìn)的想法真的牛!spring 最頂層的抽象 :
org.springframework.beans.factory.BeanFactory
類似于java中的java.lang.Object
Spring 的 資源訪問 頂層接口:{@link Resource}
1.2瓶盛、思想落地到代碼上
使用的
xml
的方式
// 獲取 xml文件,創(chuàng)建獲取資源文件
Resource resource = new ClassPathResource("applicationContext.xml");
// 很早之前是使用xmlBeanFactory, 因為這種工廠spring意識到功能太單一了最欠。
//XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);
// spring中一般都是使用工廠來加載文件的
DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();
BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(defaultListableBeanFactory);
beanDefinitionReader.loadBeanDefinitions(resource);
// 上述所有的步驟是完成了 資源的解析,工廠的裝配
// 下面的步驟就是使用工廠 提取具體的bean信息
Student student = (Student) defaultListableBeanFactory.getBean("student");
System.out.println(student);
- 在后面惩猫,會圍繞著上面簡單的代碼芝硬,逐步的分析
Spring
的底層源碼。 - 建議閱讀
《Spring源碼深度解析 2》
本文僅供筆者本人學(xué)習(xí)轧房,一起進(jìn)步拌阴!
加油!