什麼叫控制反轉IoC

IOC(Inversion of Control)控制反轉模式,意味着去除所有有該類產生但不由該類直接負責的對象實例,而改由外界傳入。
由簡單的對象開發模式到IOC(控制翻轉)
1. 依賴注入(Dependency Injection)
     組件之間的依賴關係有容器在運行時期決定。
2. 控制反轉(IoC. Inversion of Control Containers)
     控制權由應用代碼中轉移到外部容器,控制權的轉移。

IoC,翻譯成中文有人叫控制反轉,聽起來很別彆扭,其實就是依賴關係的轉移,通過XML配置文件由容器來管理類,而不是在類中直接生成Bean的實例。


以下摘自網上一個大牛對IoC的形象比喻:

套用好萊塢的一句名言就是:你待著別動,到時我會找你。
什麼意思呢?就好比一個皇帝和太監
有一天皇帝想幸某個美女,於是跟太監說,今夜我要寵幸美女
皇帝往往不會告訴太監,今晚幾點會回宮,會回哪張龍牀,他只會告訴太監他要哪位美女
其它一切都交由太監去安排,到了晚上皇帝回宮時,自然會有美女出現在皇帝的龍牀上
這就是控制反轉(IoC Inversion of Control),而把美女送到皇帝的寢宮裏面去就是注射(DI dependence Inversion)
太監就是是框架裏面的注射控制器類BeanFactory,負責找到美女並送到龍牀上去
整個後宮可以看成是Spring框架,美女就是Spring控制下的JavaBean

而傳統的模式就是一個飢渴男去找小姐出臺
找領班,幫助給介紹一個云云,於是領班就開始給他張羅
介紹一個合適的給他,完事後,再把小姐還給領班,下次再來
這個過程中,領班就是查詢上下文Context,領班的一個職能就是給客戶找到他們所要的小姐
這就是lookup()方法,領班手中的小姐名錄就是JNDI//Java Naming and Directory Interface
小姐就是EJB,飢渴男是客戶端,青樓是EJB容器
看到區別了麼?飢渴男去找小姐出臺很麻煩,不僅得找,用完後還得把小姐給還回去
而皇帝爽翻了,什麼都不用管,交給太監去處理,控制權轉移到太監手中去了
而不是皇帝,必要時候由太監給注射進去就可以了
看到Spring的美妙了吧,Spring還提供了與多個主流框架的支持
可以和其它開源框架集成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章