隨筆 - 71  文章 - 15  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          因為口渴,上帝創造了水;
          因為黑暗,上帝創造了火;
          因為我需要朋友,所以上帝讓你來到我身邊
          Click for Shaanxi xi'an, Shaanxi Forecast
          ╱◥█◣
            |田|田|
          ╬╬╬╬╬╬╬╬╬╬╬
          If only I have such a house!
          〖總在爬山 所以艱辛〗
          Email:myesjoy@yahoo.com.cn
          NickName:yesjoy
          MSN:myesjoy@hotmail.com
          QQ:150230516

          〖總在尋夢 所以苦痛〗

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Hibernate在線

          Java友情

          Java認證

          linux經典

          OA系統

          Spring在線

          Structs在線

          專家專欄

          企業信息化

          大型設備共享系統

          工作流

          工作流產品

          網上購書

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          1. Action接口:
          Action 接口定義了一個execute 方法,在我們示例中,不同的Action 實現提供了各自的
          execute方法,以完成目標邏輯。
          public?interface?Action?{
          ??
          public?String?execute(String?str);
          }
          2. Action接口的兩個實現UpperAction、LowerAction
          public?class?UpperAction?implements?Action?{
          ?
          private?String?message;
          ?
          public?String?getMessage()?{
          ?
          return?message;
          ?}
          ?
          public?void?setMessage(String?string)?{
          ??message?
          =?string;
          ?}
          ?
          public?String?execute(String?str)?{
          ??
          return?(getMessage()?+?str).toUpperCase();
          ?}
          }
          UpperAction將其message屬性與輸入字符串相連接,并返回其大寫形式。
          public?class?LowerAction?implements?Action?{
          ?
          private?String?message;
          ?
          public?String?getMessage()?{
          ??
          return?message;
          ?}
          ?
          public?void?setMessage(String?string)?{
          ??message?
          =?string;
          ?}
          ?
          public?String?execute(String?str)?{
          ??
          return?(getMessage()+str).toLowerCase();
          ?}
          }
          LowerAction將其message屬性與輸入字符串相連接,并返回其小寫形式。
          3. Spring配置文件(bean.xml)
          <beans>
          <description>Spring?Quick?Start</description>
          <bean?id="TheAction"
          class
          ="net.xiaxin.spring.qs.UpperAction">
          <property?name="message">
          <value>HeLLo</value>
          </property>
          </bean>
          </beans>
          (請確保配置bean.xml位于工作路徑之下,注意工作路徑并不等同于CLASSPATH ,eclipse
          的默認工作路徑為項目根路徑,也就是.project文件所在的目錄,而默認輸出目錄/bin是項目
          CLASSPATH的一部分,并非工作路徑。)
          4. 測試代碼
          public?void?testQuickStart()?{
          ?ApplicationContext?ctx
          =new
          FileSystemXmlApplicationContext(
          "bean.xml");
          ?Action?action?
          =?(Action)?ctx.getBean("TheAction");
          ?System.out.println(action.execute(
          "Rod?Johnson"));
          }
          可以看到,上面的測試代碼中,我們根據"bean.xml"創建了一個ApplicationContext實
          例,并從此實例中獲取我們所需的Action實現。
          運行測試代碼,我們看到控制臺輸出:
          ……
          HELLO?ROD?JOHNSON
          我們將bean.xml中的配置稍加修改:
          <bean?id="TheAction" class="net.xiaxin.spring.qs.LowerAction"/>
          再次運行測試代碼,看到:
          ……
          hello?rod?johnson
          示例完成!
          很簡單的示例,的確很簡單,甚至簡單到了不夠真實。不過,不知大家從這個最簡單的例子中看出了什么?真的只是打印輸出了兩行不痛不癢的問候語?
          仔細觀察一下上面的代碼,可以看到:
          1. 我們的所有程序代碼中(除測試代碼之外),并沒有出現Spring中的任何組件。
          2. UpperAction和LowerAction的Message屬性均由Spring通過讀取配置文件(bean.xml)動
          態設置。
          3. 客戶代碼(這里就是我們的測試代碼)僅僅面向接口編程,而無需知道實現類的具體名稱。同時,
          我們可以很簡單的通過修改配置文件來切換具體的底層實現類。
          上面所說的這些,對于我們的實際開發有何幫助?
          ? 首先,我們的組件并不需要實現框架指定的接口,因此可以輕松的將組件從Spring中脫離,甚至不需要任何修改(這在基于EJB框架實現的應用中是難以想象的)。
          ? 其次,組件間的依賴關系減少,極大改善了代碼的可重用性。
          Spring的依賴注入機制,可以在運行期為組件配置所需資源,而無需在編寫組件代碼時就加以指定,從而在相當程度上降低了組件之間的耦合。
          上面的例子中,我們通過Spring,在運行期動態將字符串 “HeLLo” 注入到Action實現類的Message屬性中。
          現在假設我們回到傳統的實現模式,應該如何處理?
          一般的處理辦法也就是編寫一個Helper類(輔助類),完成配置文件讀寫功能,然后在各個Action的構造函數中,調用這個Helper類設置message屬性值。此時,我們的組件就與這個Helper類庫建立了依賴關系,之后我們需要在其他系統中重用這個組件的話,也必須連同這個Helper類庫一并移植。實際開發中,依賴關系往往并非如此簡單,組件與項目基層代碼之間復雜的關聯,使得組件重用性大大下降。
          Spring通過依賴注入模式,將依賴關系從編碼中脫離出來,從而大大降低了組件之間的耦合,
          實現了組件真正意義上的即插即用。這也是Spring最具價值的特性之一。
          ? 面向接口編程。
          誠然,即使沒有Spring,實現面向接口的設計也不困難。Spring對于面向接口設計的意義,在于它為面向接口編程提供了一個更加自然的平臺。基于Spring開發,程序員會自然而然傾向于使用接口來定義不同層次之間的關聯關系,這種自發的傾向性,來自于Spring所提供的簡單舒適的依賴注入實現。Spring使得接口的定義和使用不再像傳統編碼過程中那么繁瑣(傳統編碼過程中,引入一個接口,往往也意味著同時要引入一個Factory類,也許還有一個額外的配置文件及其讀寫代碼)。
          posted on 2006-03-19 20:12 ★yesjoy★ 閱讀(321) 評論(0)  編輯  收藏 所屬分類: Structs學習
          主站蜘蛛池模板: 渝北区| 阿拉尔市| 肥西县| 云阳县| 沽源县| 台州市| 红安县| 寿宁县| 绥芬河市| 库伦旗| 秦皇岛市| 湾仔区| 色达县| 海盐县| 农安县| 白玉县| 牙克石市| 盐亭县| 刚察县| 高邮市| 文昌市| 鹤庆县| 襄垣县| 阿尔山市| 新安县| 简阳市| 铜川市| 寻甸| 台湾省| 塔城市| 沙雅县| 叶城县| 吉林市| 唐海县| 赤城县| 青海省| 宜良县| 华安县| 鸡西市| 蒲江县| 永和县|