程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 從spring的IOC說起(一)

從spring的IOC說起(一)

編輯:關於JAVA

這段時間也著實好好的看了下spring的相關書籍,對其也有了大概和初步的 認識和理解,雖然之前也一直聽說spring是一個非常優秀的開源框架,可一直沒 有機會學習和使用(是不是有點落伍了?呵呵),所以呢,這段時間就重點學習 了spring(一個星期的時間當然是入門級的啦~~)

大家一直都說spring的IOC如何如何的強大,其實我倒覺得不是IOC如何的強 大,說白了IOC其實也非常的簡單。我們先從IOC說起,這個概念其實是從我們平 常new一個對象的對立面來說的,我們平常使用對象的時候,一般都是直接使用 關鍵字類new一個對象,那這樣有什麼壞處呢?其實很顯然的,使用new那麼就表 示當前模塊已經不知不覺的和new的對象耦合了,而我們通常都是更高層次的抽 象模塊調用底層的實現模塊,這樣也就產生了模塊依賴於具體的實現,這樣與我 們JAVA中提倡的面向接口面向抽象編程是相沖突的,而且這樣做也帶來系統的模 塊架構問題。很簡單的例子,我們在進行數據庫操作的時候,總是業務層調用 DAO層,當然我們的DAO一般都是會采用接口開發,這在一定程度上滿足了松耦合 ,使業務邏輯層不依賴於具體的數據庫DAO層。但是我們在使用的時候還是會new 一個特定數據庫的DAO層,這無形中也與特定的數據庫綁定了,雖然我們可以使 用抽象工廠模式來獲取DAO實現類,但除非我們一次性把所有數據庫的DAO寫出來 ,否則在進行數據庫遷移的時候我們還是得修改DAO工廠類。

那我們使用IOC能達到什麼呢?IOC,就是DAO接口的實現不再是業務邏輯層調 用工廠類去獲取,而是通過容器(比如spring)來自動的為我們的業務層設置 DAO的實現類。這樣整個過程就反過來,以前是我們業務層主動去獲取DAO,而現 在是DAO主動被設置到業務邏輯層中來了,這也就是反轉控制的由來。通過IOC, 我們就可以在不修改任何代碼的情況下,無縫的實現數據庫的換庫遷移,當然前 提還是必須得寫一個實現特定數據庫的DAO。我們把DAO普遍到更多的情況下,那 麼IOC就為我們帶來更大的方便性,比如一個接口的多個實現,我們只需要配置 一下就ok了,而不需要再一個個的寫工廠來來獲取了。這就是IOC為我們帶來的 模塊的松耦合和應用的便利性。

那為什麼說IOC很簡單呢?說白了其實就是由我們平常的new轉成了使用反射 來獲取類的實例,相信任何人只要會用java的反射機制,那麼自己寫一個IOC框 架也不是不可能的。比如:

……
public ObjectgetInstance(String className) throws Exception
{
  Object obj = Class.forName(className).newInstance();
  Method[] methods = obj.getClass().getMethods();
  for (Method method : methods) {
    if (method.getName().intern() == "setString") {
      method.invoke(obj, "hello world!");
    }
  }
}
……

上面的一個方法我們就很簡單的使用了反射為指定的類的setString方法來設 置一個hello world!字符串。其實可以看到IOC真的很簡單,當然了IOC簡單並不 表示spring的IOC就簡單,spring的IOC的功能強大就在於有一系列非常強大的配 置文件維護類,它們可以維護spring配置文件中的各個類的關系,這才是spring 的IOC真正強大的地方。在spring的Bean定義文件中,不僅可以為定義Bean設置 屬性,還支持Bean之間的繼承、Bean的抽象和不同的獲取方式等等功能。

下次俺再把spring的Bean配置的相關心得和大家一起分享下,如果說的不好 ,大家可以提意見哦,可千萬不要仍臭雞蛋,嘿嘿~~~~

原文:http://j2ee.blog.sohu.com/63333114.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved