Spring的IOC和工廠模式的區別


IOC是使用了反射的技術來動態的生成對象

工廠模式的對象生成是提前在工廠類中定死的

IOC更加靈活



IoC——Inversion of Control 控制反轉

DI——Dependency Injection 依賴注入


1:如何理解IoC/DI
要想理解上面兩個概念,就必須搞清楚如下的問題:

  • 參與者都有誰?
  • 依賴:誰依賴於誰?為什么需要依賴?
  • 注入:誰注入於誰?到底注入什么?
  • 控制反轉:誰控制誰?控制什么?為何叫反轉(有反轉就應該有正轉了)?
  • 依賴注入和控制反轉是同一概念嗎?

下面就來簡要的回答一下上述問題,把這些問題搞明白了,IoC/DI也就明白了。
(1)參與者都有誰:

一般有三方參與者,一個是某個對象;一個是IoC/DI的容器;另一個是某個對象的外部資源。
又要名詞解釋一下,某個對象指的就是任意的、普通的Java對象; IoC/DI的容器簡單點說就是指用來實現IoC/DI功能的一個框架程序;對象的外部資源指的就是對象需要的,但是是從對象外部獲取的,都統稱資源,比如:對象需要的其它對象、或者是對象需要的文件資源等等。


(2)誰依賴於誰:

當然是某個對象依賴於IoC/DI的容器
(3)為什么需要依賴:

對象需要IoC/DI的容器來提供對象需要的外部資源
(4)誰注入於誰:

很明顯是IoC/DI的容器 注入 某個對象
(5)到底注入什么:

就是注入某個對象所需要的外部資源
(6)誰控制誰:

當然是IoC/DI的容器來控制對象了
(7)控制什么:

主要是控制對象實例的創建
(8)為何叫反轉:

反轉是相對於正向而言的,那么什么算是正向的呢?考慮一下常規情況下的應用程序,如果要在A里面使用C,你會怎么做呢?當然是直接去創建C的對象,也就是說,是在A類中主動去獲取所需要的外部資源C,這種情況被稱為正向的。那么什么是反向呢?就是A類不再主動去獲取C,而是被動等待,等待IoC/DI的容器獲取一個C的實例,然后反向的注入到A類中。




免責聲明!

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



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