鍍金池/ 教程/ Java/ 控制反轉(zhuǎn)(IoC)/依賴注入(DI)
控制反轉(zhuǎn)(IoC)/依賴注入(DI)
工廠模式
Bean 的銷毀
Bean 的定義
IoC 容器
Bean 之前初始化
設(shè)計(jì)用戶持久化類
工廠模式改進(jìn)
配置 Bean 的屬性值和 Bean 對象的組裝
BeanFactory 管理 Bean(組件)的生命周期
BeanFactory
幾種依賴注入模式的對比總結(jié)
依賴注入的三種實(shí)現(xiàn)形式
復(fù)雜的屬性值

控制反轉(zhuǎn)(IoC)/依賴注入(DI)

什么是控制反轉(zhuǎn)/依賴注入?

控制反轉(zhuǎn)(IoC=Inversion of Control)IoC,用白話來講,就是由容器控制程序之間的(依賴)關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控。這也就是所謂“控制反轉(zhuǎn)”的概念所在:(依賴)控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移,是所謂反轉(zhuǎn)。

IoC 也稱為好萊塢原則(Hollywood Principle):“Don’t call us, we’ll call you”。即,如果大腕明星想演節(jié)目,不用自己去找好萊塢公司,而是由好萊塢公司主動(dòng)去找他們(當(dāng)然,之前這些明星必須要在好萊塢登記過)。

正在業(yè)界為 IoC 爭吵不休時(shí),大師級人物 Martin Fowler 也站出來發(fā)話,以一篇經(jīng)典文章《Inversion of Control Containers and the Dependency Injection pattern》為 IoC 正名,至此,IoC 又獲得了一個(gè)新的名字:“依賴注入 (Dependency Injection)”。

相對 IoC 而言,“依賴注入”的確更加準(zhǔn)確的描述了這種古老而又時(shí)興的設(shè)計(jì)理念。從名字上理解,所謂依賴注入,即組件之間的依賴關(guān)系由容器在運(yùn)行期決定,形象的來說,即由容器動(dòng)態(tài)的將某種依賴關(guān)系注入到組件之中。

例如前面用戶注冊的例子。UserRegister依賴于UserDao的實(shí)現(xiàn)類,在最后的改進(jìn)中我們使用 IoC 容器在運(yùn)行期動(dòng)態(tài)的為UserRegister注入UserDao的實(shí)現(xiàn)類。即UserRegisterUserDao的依賴關(guān)系由容器注入,UserRegister不用關(guān)心UserDao的任何具體實(shí)現(xiàn)類。如果要更改用戶的持久化方式,只要修改配置文件 applicationContext.xml 即可。

依賴注入機(jī)制減輕了組件之間的依賴關(guān)系,同時(shí)也大大提高了組件的可移植性,這意味著,組件得到重用的機(jī)會(huì)將會(huì)更多。

上一篇:復(fù)雜的屬性值下一篇:IoC 容器