《Spring揭祕》學習筆記——IOC是什麼
Spring揭祕是本很老的書了,京東上想買正版書都買不到了,畢竟Spring迭代那麼多版,估計文章內的很多程式碼都不適用了。
但是在Spring系列中,這本書評分是最高的,年初疫情期間趁著工作量不大把他看完了,現在希望能結合工作專案所用的Spring框架,複習一下並來看看該框架的實際變化。
IoC是隨著近年來輕量級容器(Lightweight Container)的興起而逐漸被很多人提起的一個名詞,它 的全稱為Inversion of Control,中文通常翻譯為“控制反轉”,它還有一個別名叫做依賴注入(Dependency Injection)
本質上就是:
如果某個Java物件裡有一些成員
那麼儘量不要把這些成員寫死(例如某個成員的型別是A, 不要寫死成A=new A1()或者A=new A2())
而要通過 構造器 或者get、set來注入進來
換句話說,在這個物件的實現中,我們看不到成員物件的具體賦值, 一切都通過外部來決定恆成員是什麼
而在Spring裡,這個構造器和get、set都通過IOC SerivceProvider來提供
這個圖很經典
3種注入方式:
-
構造方法注入:Ioc用構造方法去注入。
好處是一旦構造好了,就可以馬上用。 而且只需要對應類名和引數列表。缺點是引數多的話會很麻煩。 -
setter方法注入: Ioc用setXXX去注入成員。
良好。易擴充套件。通過set去設定成員。 -
介面注入: 必須要實現介面,然後介面裡方法的引數為真正傳入的成員物件。這個方式不提倡,有侵入性,一旦新增,其他全要開
介面注入看了好幾遍才想明白是啥意思,換個通俗易懂的解釋:
- 構造方法注入: Ioc只要知道類名和構造引數, 即可給你用反射傳進去,。
- set方法注入: Ioc只要類名和你有哪些成員, 即可寫反射的程式碼給你注入,都是setXXX,處理方式不會有變動。
- 介面方注入: Ioc 必須知道你有哪些注入介面,才能給你注入。 比如你用Init(A a)來注入, 於是Ioc必須也指定init這個方法, 再加引數,才給給你注入
明顯介面注入,如果init方法改名了,可能會造成大面積的注入修改(因為其他地方可能都用了Init去構造了,然後爆炸)
而構造和set方式幾乎都是相同的注入操作,只要改入參和類名即可。
例子:
IOC ServiceProvider
就是如何相當於服務員
對於業務類,不需要知道自己的成員具體是誰
而如何確定自己的真正成員,來自於IOC SeviceProverdier
。它可以是一段程式碼,也可以是一組相關的類,甚至可以是比較通用的IoC框架或 者IoC容器實現
。Spring 的IoC容器就是一個提供依賴注入服務的IoC Service Provider
IOCSP的職責:
業務物件的構建管理,即怎麼建立依賴物件
業務物件間 的依賴繫結, 即怎麼確定誰依賴誰。
IOCSP的管理方式:
1.
直接編碼,例如寫1個map來做 類->具體子類的對應關係。然後在寫map.put. get之類的程式碼來自己主動注入
2.
文字檔案(xml、配置檔案),然後自己去getXMl或者getPropetris解析
3.
註解, 相當於不用自己寫map的put、get, 而是通過某個框架的註解,確定注入方式,然後去在那個框架對應的程式碼或者配置檔案中寫就行了。 其實就是1、2的升級版,不用自己去做解析和儲存操作,你只要去框架那裡寫對應依賴關係即可。
相關文章
- Spring學習筆記2(IOC註解方式&AOP)Spring筆記
- Spring IoC 到底是什麼Spring
- Spring---IoC(控制反轉)原理學習筆記【全】Spring筆記
- 《CSS揭祕》筆記(一)CSS筆記
- spring IOC/DI筆記Spring筆記
- Spring框架學習筆記(一):官方文件介紹,IoC與AOP概念學習Spring框架筆記
- 什麼是Spring Boot?為什麼要學習Spring Boot?Spring Boot
- DI、IOC基礎學習筆記筆記
- 《CSS揭祕》讀書筆記CSS筆記
- 以太坊學習筆記————1、以太坊是什麼?筆記
- spring學習筆記Spring筆記
- Spring 學習筆記Spring筆記
- Spring的IOC是啥?有什麼好處?Spring
- 我的 golang 學習筆記系列一:什麼是切片Golang筆記
- 快照是什麼?揭祕儲存快照的實現
- 揭祕高仿包包海洋頂級是什麼意思
- Spring學習筆記(一)Spring筆記
- spring學習筆記(1)Spring筆記
- Spring 學習筆記(2) Spring BeanSpring筆記Bean
- Spring 學習筆記(3)Spring MVCSpring筆記MVC
- 《揭祕跨境電商》讀書筆記筆記
- Spring IOC官方文件學習筆記(十一)之使用JSR 330標準註解Spring筆記JS
- spring-5學習筆記Spring筆記
- Spring MVC學習筆記二SpringMVC筆記
- Spring框架學習筆記(1)Spring框架筆記
- Spring學習筆記目錄Spring筆記
- Spring Security Filter 學習筆記SpringFilter筆記
- CSS揭祕筆記(2):背景與邊框CSS筆記
- 小白都能看懂的Spring原始碼揭祕之IOC容器原始碼分析Spring原始碼
- 【java面試】Spring的IOC是啥?有什麼好處?Java面試Spring
- 第一個完整的spring查詢功能學習筆記【Spring工程學習筆記(二)】Spring筆記
- Spring Boot學習筆記:Spring Boot核心配置Spring Boot筆記
- go 學習筆記之解讀什麼是defer延遲函式Go筆記函式
- Spring Boot 學習筆記(3):MyBatisSpring Boot筆記MyBatis
- Spring Boot 學習筆記(2):JDBCSpring Boot筆記JDBC
- Java Spring Boot 學習筆記(一)JavaSpring Boot筆記
- Spring boot + Zookeeper + Dubbo學習筆記Springboot筆記
- Spring IOC 為什麼能降低耦合Spring