IoC and DI JSR-299 JSR-330

前言

JSR 299: Contexts and Dependency Injection for the JavaTM EE platform

JSR 330: Dependency Injection for Java

從名稱來看可知 JSR 299 主要作用於 JavaTM EE(在JavaSE環境下功能會打折扣),JSR 330 則作用於任何 Java 環境

理解與認知

IoC and DI

普通編程時,程序邏輯的流程通常是由一個功能中心來控制的,而使用 IoC 機制,這個“中心控制”的設計原則會被反轉過來。調用者的代碼處理程序的執行順序,而程序邏輯則被封裝在接受調用的子流程中。通過一個例子來理解IoC:

例如,在GUI應用中,GUI框架負責控制調用事件處理器,而不是應用邏輯,當用戶點擊了一個動作,比如“向前”,GUI框架會自動調用 對應的事件處理器,而應用邏輯可以把重點放在處理動作上。程序的控制被反轉了,將控制權由應用邏輯轉移到了GUI框架(這個其實就是IoC容器)。

IoC機制也被稱爲好萊塢原則:會有另一段代碼擁有最初的控制線程,並且由它來調用你的代碼,而不是由你的代碼調用它,即控制反轉到了框架那裏,如SpringMVC編程中,最初的Servlet入口必然是Spring的分發器(DispatcherServlet),這就將控制權交給了 Spring 這個 IoC容器,我們編寫的 Servlet(或 Controller)只負責業務處理,不必關係業務的控制流程。

不要給我們打電話,我們會打給你。——好萊塢原則

IoC有多種不同的實現,包括工廠模式、服務器定位模式,當然還有依賴注入。需要注意的是,DI並不等於IoC,DI只是IoC的一種實現方式,IoC是一種機制,IoC機制可以有除了DI以外的各種實現方式,它是一種機制,也是一種思想

DI是IoC的一種特定形態,是指尋找依賴項的過程不在當前執行代碼的直接控制之下。Java中爲DI提供的容器有Guice、Spring等。DI的好處有:松耦合、易測試、強內聚、可重用、更輕盈的代碼。

具體分類的IOC容器的控制反轉:

1.DI類的IOC實現是將尋找依賴項的控制權交給了容器

2.服務器定位模式類的IOC實現是將定位服務的控制權交給了容器

3.等等

輕量級的 DI 類的 IoC容器實現 Guice,可以在 JavaSE 和 Servlet中滿足我們的控制反轉需求,可大大提高程序的開發效率,

當然Spring也有相同的功能,只不過Spring發展到後來還容納了諸如 事務控制、切面編程等強大功能,已經不單單是一個 依賴注入(DI)容器了,具體用哪個,請自己掂量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章