Ioc的做用

IoC能夠認爲是一種全新的設計模式,可是理論和時間成熟相對較晚,並無包含在GoF中。編程

Interface Driven Design接口驅動,接口驅動有不少好處,能夠提供不一樣靈活的子類實現,增長代碼穩定和健壯性等等,可是接口必定是須要實現的,也就是以下語句早晚要執行:AInterface a = new AInterfaceImp(); 這樣一來,耦合關係就產生了。設計模式

Spring經過這種控制反轉(IoC)的設計模式促進了鬆耦合。當應用了IoC,一個對象依靠的其它對象會經過被動的方式傳送進來,而不是這個對象本身建立或者查找依靠對象。不是對象從容器中查找依靠,而是容器在對象初始化時不等對象請求就主動將依靠傳送給它。咱們能夠把IoC模式看作是工廠模式的昇華,能夠把IoC看做是一個大工廠,只不過這個大工廠裏要生成的對象都是在XML文件中給出定義的,而後利用Java的「反射」編程,根據XML中給出的類名生成相應的對象。從實現來看,IoC是把之前在工廠方法裏寫死的對象生成代碼,改變爲由XML文件來定義,也就是把工廠和對象生成這二者獨立分隔開來,目的就是提升靈活性和可維護性。服務器

1.依賴查找

容器提供回調接口和上下文條件給組件。EJB和Apache Avalon 都使用這種方式。這樣一來,組件就必須使用容器提供的API來查找資源和協做對象,僅有的控制反轉只體如今那些回調方法上(也就是上面所說的 類型1):容器將調用這些回調方法,從而讓應用代碼得到相關資源。架構

容器中的受控對象經過容器的API來查找本身所依賴的資源和協做對象。這種方式雖然下降了對象間的依賴,可是同時也使用到了容器的API,形成了咱們沒法在容器外使用和測試對象。依賴查找是一種更加傳統的IoC實現方式。框架

<bean id="accountService4" class="com.luban.service.impl.AccountServiceImpl" scope="prototype"</bean>

 

2.依賴注入

組件不作定位查詢,只提供普通的Java方法讓容器去決定依賴關係。容器全權負責的組件的裝配,它會把符合依賴關係的對象經過JavaBean屬性或者構造函數傳遞給須要的對象。經過JavaBean屬性注射依賴關係的作法稱爲設值方法注入(Setter Injection);將依賴關係做爲構造函數參數傳入的作法稱爲構造器注入(Constructor Injection)。函數

Spring是一個開源輕量級框架,於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著做Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是爲了解決企業應用開發的複雜性而建立的。框架的主要優點之一就是其分層架構,分層架構容許使用者選擇使用哪個組件,同時爲 J2EE 應用程序開發提供集成的框架。測試

Spring使用基本的JavaBean來完成之前只可能由EJB完成的事情。然而,Spring的用途不只限於服務器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益。Spring的核心是控制反轉(IoC)和麪向切面(AOP)。編碼

Spring 能有效地組織J2EE應用各層的對象。不論是控制層的Action對象,仍是業務層的Service對象,仍是持久層的DAO對象,均可在Spring的 管理下有機地協調、運行。Spring將各層的對象以鬆耦合的方式組織在一塊兒,Action對象無須關心Service對象的具體實現,Service對 象無須關心持久層對象的具體實現,各層對象的調用徹底面向接口。當系統須要重構時,代碼的改寫量將大大減小。
上面所說的一切都得宜於Spring的核心機制,依賴注入。依賴注入讓bean與bean之間以配置文件組織在一塊兒,而不是以硬編碼的方式耦合在一塊兒。spa

<bean id="accountService" class="com.luban.service.impl.AccountServiceImpl"
  scope="singletion" init-method="init" destroy-method="destroy"></bean>prototype

<bean id="accountService" class="com.luban.service.impl.AccountServiceImpl"
  scope="prototype" init-method="init" destroy-method="destroy"></bean>

-END-

相關文章
相關標籤/搜索