用最簡單的方式理解 IoC 控制反轉


思想引入

假設一個系統原先只設定有一個默認的方法去完成業務,這里舉例這個原先設定開發的是 UserDaoImpl(可能有些牽強,但是不影響我們對邏輯的理解)這樣一個業務。

后來有一天,需求變了,業務流程大改,這里舉例改為 UerDaoOracleImpl,這時候我們可能需要修改 UserService中對Dao層的引用,即修改原理的UserDaoImpl為UerDaoOracleImpl。

再后來,用戶需求又變了,比如來了個 UserDaoMysqlImpl,這時候可能有得修改代碼了吧。

好吧,那改吧,但是呢又有一天產品經理跑過來說改回原來的第一種,emmmm

示意圖如下:

既然這樣,和不把這個修改權丟給用戶呢?要是能把這個修改權交給用戶自由適用,那我們是不是可以把節省下來的時間拿去學新的技術了呢?是不是讓用戶感覺更好了呢?

就這樣IOC思想來了!

IOC思想

IoC,Inversion of Control,控制反轉,是一種設計思想。

即把對象的創建,從原來的由原來的程序自己控制,變成了向外轉給第三方/用戶/容器來根據需要自定義管理創建。

舉個和代碼不是很相關的例子,例如以前的網站幾乎都是只有一種風格,網站管理者設計的是什么樣用戶看到的就是什么樣,但是現在不一樣了,不少網站支持用戶根據自己的喜好隨意切換風格、皮膚,這也是控制反轉思想的一種應用吧。

IOC簡單應用

好,現在就簡單的應用 IoC 這種思想來改變上圖這的邏輯吧。

假設我們這里的 UserController就是對外(用戶)的接口,即別的人/系統回從這里開始調用我們的業務邏輯。

現在我們就在這里直接接入用戶需求,例如接口使用方說用 UserDaoMysqlImpl,好,那你就自己new一個UserDaoMysqlImpl對象傳入我的預留的接口就行唄。

再過兩天接口調用者又想用 UerDaoOracleImpl 這套了,也行,你自己set進去一個UerDaoOracleImpl就能調用我對UerDaoOracleImpl這套業務的支持了。

就這樣,IoC 思想用上了,使用的人能按照自己的意思來了,我們也節省力氣了。

示意圖如下:

好了,到這里對IOC思想我們已經有了解了,那么Spring這個家伙又是怎么把IOC這種思想完美的應用了呢?

下一篇探討:《Spring中的IOC流程、實現》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM