深刻理解-Spring-之源碼剖析IOC(一)

引言java

做爲Java程序員,Spirng咱們再熟悉不過,能夠說比本身的女友還要親密,天天都會和他在一塊兒,然而咱們真的瞭解spring嗎?程序員

咱們都知道,Spring的核心是IOC和AOP,但樓主認爲,若是從這兩個核心中挑選一個更重要的,那非IOC莫屬。AOP也是依賴於IOC,從某些角度講,AOP就是IOC的一個擴展功能。spring

什麼是IOC? IOC解決了什麼問題?IOC的原理是什麼?Spring的IOC是怎麼實現的?今天咱們將會將這幾個問題一塊兒解決。編程

1. 什麼是IOC?框架

控制反轉(Inversion of Control,縮寫爲IoC),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。maven

其中最多見的方式叫作依賴注入(Dependency Injection,簡稱DI),還有一種方式叫「依賴查找」(Dependency Lookup)。gradle

經過控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用傳遞給它。也能夠說,依賴被注入到對象中。設計

這是維基百科的說法,樓主按照本身的思路分析一下IOC,樓主認爲,分析一個問題,或者說證實一個事情,有2種方法,一是正向驗證,即按照該事物的邏輯去驗證正確性,還有一種是反向驗證,證實該事物是否正確。code

樓主想反向證實IOC,咱們提出一個疑問:若是沒有IOC會怎麼樣?對象

想象一下,在沒有IOC的世界裏,咱們的系統會有大量的對象,這些對象有些是數據,有些是處理數據的。

而且各個對象相互依賴,咱們須要控制他們的依賴關係,何時new ,何時銷燬,何時須要單例,何時不須要單例等等這些問題。

你能想象嗎?當你一個系統有幾千個類,你如何管理他們的依賴關係,提及依賴,咱們可能會想起 maven 或者 gradle,他們管理着咱們的 jar 包依賴,而咱們的系統代碼呢?

可是若是有一種東西,他可以幫助咱們管理全部類的建立,銷燬,是不是單例模式,類與類之間的多層依賴關係(在咱們的MVC框架中,3層依賴已是最少),那該多好,咱們只須要關注業務邏輯。因而 ,IOC誕生了。

2. IOC 解決了什麼問題?

簡單來講, IOC 解決了類與類之間的依賴關係。程序員將控制類與類之間依賴的權利交給了IOC,即:控制被反轉了。

3. IOC 的原理是什麼?

其實 IOC 的原理很簡單,底層就是java的反射。給定一個字符串能建立一個實例,利用set方法對實例的依賴進行注入。

相關文章
相關標籤/搜索