主要是loadbeandefinitions(beanfactory);方法讀取的
1、建立乙個xmlbeandefinitionreader物件
2、呼叫getinputstream獲取到document物件:doloaddocument(inputsource, resource);
3、解析document中的值:registerbeandefinitions(doc, resource); ->documentreader.registerbeandefinitions - > doregisterbeandefinitions(root);-> parsebeandefinitions(root, this.delegate);
1、構造方法注入無法解決迴圈依賴問題
2、set方法注入循壞依賴解決方案:**快取
一級快取:儲存完全物件 singletonobjects,使用concurrenthashmap來保證安全性
二級快取:儲存半物件 earlysingletonobjects
**快取:存的是$proxy,也就是**物件
3、流程
1、建立a物件,填充a物件中的b的時候,b是空的,需要去建立b物件。
2、建立b物件,填充b物件中的a的時候,發現有乙個a的半物件,將半物件傳入到b中,b此時就是成品物件,再將b物件傳入到a中,此時a也就是乙個成品物件了
4、可不可以只有一級快取
不可以,因為不能區分是成品物件還是半成品物件
5、可不可以只有二級快取
如果沒有aop的**物件,是可以只有二級快取的
6、**快取存在的意義
因為如果有aop的情況下,可能會將**物件替換非**物件,如果沒有**快取的話,就得不到**物件。因為乙個容器中,不可以有同名的兩個物件,乙個**物件,乙個非**物件
2.**設計模式:spring aop功能的實現。
3.單例設計模式:spring中的bean預設都是單例的。
4.模板方法模式:spring中的jdbctemplate、hibernatetemplate等以template結尾的對資料庫操作的類,它們就使用到了模板模式。
5.包裝器設計模式:我們的專案需要連線多個資料庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的資料庫。這種模式讓我們可以根據客戶的需求能夠動態切換不同的資料來源。
6.觀察者模式:spring事件驅動模型就是觀察者模式很經典的乙個應用。
7.介面卡模式:spring aop的增強或通知(advice)使用到了介面卡模式、spring mvc中也是用到了介面卡模式適配controller。
1、controller:標註是乙個controller
2、service:標註是乙個service
3、repository:標註是乙個dao
4、component:標註是乙個類
5、responsebody:返回json
6、resource:注入物件,以名字注入
7、autowired:注入物件, 以型別注入
SpringIoc的注入原理
spring是在配置類需要指定掃瞄包,然後遞迴得到下面所有的檔案 springboot預設啟動類和兄弟目錄下面所有的包檔案 包名 檔名 類全限定名 calss.from載入到記憶體當中,得到位元組碼 class 判斷這個類的腦門上是否有註解 就是類的頭頂上 有註解的話,就把這個類先put到map裡面...
Spring ioc的底層原理
ioc inversion of control,控制反轉 乙個類的某個屬性需要使用時,需要有本類自己初始化。而在spring類的某些屬性不用自己初始化而交給了spring來管理。這樣的轉換就是ioc思想。spring的ioc思想是,spring的ioc容器在初始化的時候就根據配置對相應的物件進行初...
Spring IoC底層原理
siwuxie095 spring ioc 底層原理 1 ioc 即 inversion of control,控制反轉,把物件的建立 交給 spring 進行管理 2 ioc 容器管理 bean 的方式 1 基於 配置檔案的方式 2 基於 註解的方式 3 ioc 底層原理所使用的技術 1 xml ...