eagames  
          日歷
          <2005年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345
          統(tǒng)計
          • 隨筆 - 22
          • 文章 - 0
          • 評論 - 2
          • 引用 - 0

          導(dǎo)航

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          收藏夾

          test

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          Spring(1)
          一地雞毛 @ 2004-08-12 17:57

          看了Rod的介紹Spring的文章,翻譯后的連接:


          http://blog.csdn.net/taowen2002/archive/2004/05/07/15875.aspx

          一,Spring簡介
          Spring的特點:
          1, Spring不同于其他的Framework,它要提供的是一種管理你的業(yè)務(wù)對象的方法。
          2, Spring有分層的體系結(jié)構(gòu),意味著你能選擇僅僅使用它的任何一個獨立的部分,而其他的仍然使用你的相關(guān)實現(xiàn)。
          3, 它的設(shè)計從一開始就是要幫助你編寫易于測試的代碼,Spring是使用測試驅(qū)動開發(fā)(TDD)的工程的理想框架。
          4, Spring不會給你的工程添加對其他的框架依賴;同時Spring又可以稱得上是個一攬子解決方案,提供了一個典型應(yīng)用所需要的大部分基礎(chǔ)架構(gòu)。

          Spring的好處:
          1, Spring能有效地組織你的中間層對象;(*)
          2, Spring能消除在許多工程中常見的對Singleton的過多使用;
          3, 通過一種在不同應(yīng)用程序和項目間一致的方法來處理配置文件,消除各種自定義格式的屬性文件的需要,僅僅需要看看類的JavaBean屬性。Inversion of Control的使用幫助完成了這種簡化;(使用的是type2的IoC)
          4, 能夠很容易培養(yǎng)你面向接口而不是面向類的編程習慣。(這也算。。。)
          5, Spring的設(shè)計會讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于它的APIs,在Spring應(yīng)用中的大多數(shù)業(yè)務(wù)對象沒有依賴于Spring。
          6, 使用Spring構(gòu)建的應(yīng)用程序易于單元測試;
          7, Spring使EJB成為一個實現(xiàn)選擇,而不是必需的選擇。你可以用POJOs或local EJBs來實現(xiàn)業(yè)務(wù)接口,卻不會影響到調(diào)用代碼。
          8, Spring提供一些web應(yīng)用上的EJB的替代方案,比如用AOP提供聲明性事務(wù)管理;
          9, Spring為數(shù)據(jù)存取提供了一個一致的框架,不論是使用JDBC還是O/R mapping的產(chǎn)品(Hibernate,JDO)。

          Spring的任務(wù)描述:
          Spring的主要目的就是使J2EE易用和促進良好的編程習慣。
          Spring不會重新發(fā)明輪子,它是讓已有的技術(shù)更加易用,比如它沒有底層事務(wù)協(xié)調(diào)處理,但是提供了一個抽象層覆蓋了JTA和任何其他的事物策略。Spring并沒有和其他的開源項目競爭,不過還是在一些領(lǐng)域有新的方案提供,比如它的web framework,輕量級的IoC容器和AOP框架。


          二,Inversion of Control容器
          Spring的設(shè)計核心是org.springframework.beans包,用來協(xié)調(diào)JavaBeans的工作。這個包一般不會被用戶直接使用,而是作為其他功能的基礎(chǔ)服務(wù)。
          下一個高一些的抽象概念是Bean Factory,一個Spring bean factory是一個可以通過名稱來獲取objects的通用工廠,并且管理objects之間的關(guān)系。
          Bean factories支持兩種對象模式:
          Singleton:默認的,最常使用的,對于無狀態(tài)的對象是一種理想的模式。
          Prototype:每次獲取將創(chuàng)建一個獨立的對象,可以讓用戶擁有他們自己的對象。

          由于org.springframework.beans.factory.BeanFactory是一個簡單的接口,所以你能夠方便地實現(xiàn)出你自己的BeanFactory,但是很少用戶需要這樣做;常用的BeanFactory定義是:
          XmlBeanFactory:解析簡單直觀的定義類和命名對象屬性的XML結(jié)構(gòu);
          ListableBeanFactoryImpl:提供了解析存放在屬性文件中的bean定義的能力;

          通過BeanFactory的概念,Spring成為了一個Inversion of Control容器。IoC背后的概念就是所謂的Hollywood原則:Don’t call me, I ‘ll call you。IoC將控制創(chuàng)建的職責從對象的代碼中搬進了框架中,使用IoC容器只需指出組件需要X對象,在運行期容器會提供給它具體的對象。而容器就是通過查看方法的參數(shù)表(例如JavaBean的屬性),或者通過配置源(XML)來得到相應(yīng)的信息,從而實現(xiàn)向組件提供對象

          Spring ApplicationContext是BeanFactory的子接口,為下列東西提供支持:
          信息查找,支持國際化
          事件機制,允許發(fā)布應(yīng)用程序以及可選的注冊已接受到事件
          可移植的文件和資源訪問


          三,JDBC抽象和數(shù)據(jù)訪問異常層次
          JDBC提供了不錯的數(shù)據(jù)庫抽象,但是也有痛苦的地方:
          需要大量的錯誤處理代碼來確保ResultSet,Statement,Connection在使用后關(guān)閉;
          沒有異常的層次,使用SQLException來響應(yīng)所有的錯誤,并不知道具體錯在哪里。
          Spring用兩種方法解決這些問題:
          通過API把冗長易出錯的異常處理代碼從程序轉(zhuǎn)移到框架中,框架處理所有異常,而程序代碼集中精力進行SQL和處理結(jié)果上;
          為要處理SQLException的程序代碼提供有意義的異常層次。當Spring第一次從數(shù)據(jù)源取得一個連接時,它檢查元數(shù)據(jù)以確定數(shù)據(jù)庫,隨后它使用這些信息把SQLException映射為自己的異常層次中的響應(yīng)的異常,是你可以和有意義的異常打交道。

          Spring提供兩層JDBC API,第一個在org.springframework.jdbc.core包中,使用回調(diào)機制移動控制權(quán)從程序轉(zhuǎn)移到了框架中,這是一種不同的Inversion of Control。
          在org.springframework.jdbc.object包中是對JDBC的更高層次的抽象。這是建立在核心的JDBC回調(diào)功能基礎(chǔ)之上的,但是提供了一個能夠?qū)DBMS操作的API,在這個API中無論是查詢,更新或是存儲過程,都是用Java對象來建模。這組API受到了JDO查詢API的影響,非常直接而且有用。

          Spring數(shù)據(jù)訪問異常層次是基于unchecked exception的,這樣開發(fā)者可以自己決定是否來捕捉這些異常從而恢復(fù)。

          Spring JDBC對你帶來的好處:
          你不必像JDBC那樣寫finally;
          你需要編寫的代碼變少了;
          你不必鉆研RDBMS文檔去解決理解,一個因為錯誤的列名而返回的詭異錯誤碼;
          不管你使用何種持久化技術(shù),你都可以方便地實現(xiàn)DAO模式,讓業(yè)務(wù)代碼不依賴于任何特定的數(shù)據(jù)訪問API。


          四,O/R mapping集成
          Spring提供了對Hibernate 2.x和JDO的集成支持,尤其是對Hibernate的集成。
          為什么要使用Hibernate+Spring,而不是直接使用Hibernate呢?
          1, 用Hibernate的代碼通常需要為了效率和適當?shù)氖聞?wù)處理而使用相同的Session對象;Spring通過在代碼層上使用顯式的template包裝類或者使用聲明式的,AOP的方法攔截(interceptor)方式兩種方案,使得能夠很容易透明地創(chuàng)建和綁定Session到當前的線程。
          2, 資源管理,Spring的應(yīng)用程序context能夠處理Hibernate SessionFactories的位置和配置,JDBC數(shù)據(jù)源和其他的相關(guān)資源;使得易于管理和改變。
          3, 集成的事務(wù)管理 Spring讓你能夠把你的Hibernate代碼包裝起來,通過2種方式:在代碼層上使用顯式的template包裝類,或者使用聲明式的,AOP的方法攔截(interceptor)。
          4, Spring能夠包裝Hibernate異常,把它們從私有的,checked異常轉(zhuǎn)換為一套抽象的運行時異常;使得你能夠在任何你需要的地方捕捉和處理異常,并且JDBC異常也被轉(zhuǎn)換到相同的層次中,意味著你能在一致的編程模型中對JDBC執(zhí)行相同的操作。
          5, 為了避免和廠商綁定 Hibernate強大,靈活,免費,當時仍然使用私有的API;Spring對Hibernate的事務(wù)和異常的抽象,使你很容易將Hibernate-specific代碼隔離開你的應(yīng)用程序部分,而不會影響Hibernate的強大功能。
          6, 測試簡單 Spring的IoC使它很容易改變Hibernate session factories的位置,數(shù)據(jù)源,事務(wù)管理和映射對象執(zhí)行,這使得很容易隔離和測試每一塊持久關(guān)系代碼。

          五,事務(wù)管理
          JTA使一個直接用起來很笨重的API,許多J2EE開發(fā)者感到EJB CMT使對于事務(wù)管理的唯一合理的選擇。
          Spring提供了它對事務(wù)管理的抽象,提供了:
          1, 通過類似于JdbcTemplate的回調(diào)模板編程管理事務(wù),比起直接用JTA容易多;
          2, 類似于EJB CMT的聲明式事務(wù)管理,但不需要EJB容器;


          六,AOP
          Spring的AOP支持的首要目標是要給POJOs提供J2EE服務(wù),而且它有能夠在應(yīng)用服務(wù)器之間移植的優(yōu)勢,Spring AOP支持method interception,關(guān)鍵概念包括:
          Interception:自定義行為能夠在對接口和類的調(diào)用之前之后插入;
          Introduction:指定advice會導(dǎo)致對象實現(xiàn)額外的接口,混亂了繼承;

          Spring使用動態(tài)代理實現(xiàn)AOP或者在運行時使用CGLIB生成字節(jié)碼(這是的能夠代理類)。兩種方法都能夠在任何應(yīng)用服務(wù)其中使用。
          Spring使實現(xiàn)了AOP Alliance接口的AOP框架(在學(xué)習AOP中介紹過)。

          Spring AOP最常見的應(yīng)用使聲明式事務(wù)管理,這是基于前面描述的TransactionTemplate抽象上的,并且可以給任何POJO提供聲明式事務(wù)管理。
          Spring的聲明式事務(wù)管理類似于EJB CMT,但在以下方面不同:
          l 事務(wù)管理能夠應(yīng)用于任何POJO;
          l 通過使用Spring的事務(wù)API能夠在事務(wù)性POJO中實現(xiàn)編程回掉。為此我們提供靜態(tài)的方法,使用ThreadLocal變量,因而不需要你傳遞EJBContext這樣的對象確保回滾;
          l 你可以聲明式地定義“回滾規(guī)則”;
          l 事務(wù)管理不綁定于JTA。
          當然你還可以使用Spring AOP實現(xiàn)程序特有的aspects。
          請對以上恢復(fù)出來的文字進行修改后提交
          七,MVC web框架
          Spring的MVC model類似于Struts。在多線程服務(wù)對象這點上,Spring的Controller類似于Struts Action,只有一個實例處理所有客戶請求。
          Spring MVC比起Struts的優(yōu)點:
          1, Spring在Controller, JavaBean, model和views提供了一個非常清晰的劃分;
          2, Spring的MVC是非常靈活的。不像Struts強制你繼承它的Action和Form對象,Spring MVC完全是基于接口的;
          3, Spring MVC是真正的view無關(guān)的。你不會被強制使用JSP
          4, 和其他對象一樣,Spring的Controller是通過IoC配置的。使它們易于測試;
          5, Web層變成了業(yè)務(wù)對象層上的薄薄一層


          八,EJB相關(guān)
          實現(xiàn)EJB:
          如果你選擇使用EJB,Spring能在EJB實現(xiàn)和客戶端訪問EJB兩方面都提供很大的好處。
          Spring為session bean和message drive bean提供了方便的超類,使得通過自動載入基于包含在EJB jar文件中的XML文檔BeanFactory讓這變得很容易。
          感覺不是很有用的樣子。

          使用EJB:
          許多EJB程序使用Service Locator和Business Delegate模式,這些比在客戶代碼中使用JDNI查找強多了,但是還是有顯著的缺點:
          l 使用EJB的典型代碼依賴Service Locator或者Business Delegate singletons,難于測試;
          l 在Service Locator模式?jīng)]有使用Business Delegate的情況下,程序代碼還要在EJB home重調(diào)用create()方法,并且可能導(dǎo)致異常,代碼依然綁定在EJB API上;
          l 實現(xiàn)Business Delegate模式通常導(dǎo)致顯著的代碼重復(fù);
          我們只需要給需要EJB的Bean定義一個組件,在XML中指定它的jndi name,interface,Spring AOP框架會幫你為EJB創(chuàng)建一個代理,實現(xiàn)了業(yè)務(wù)方法的接口,緩存EJBHome,代理JNDI查找,調(diào)用響應(yīng)的業(yè)務(wù)方法。
          從而使你的web層代碼不依賴于EJB的使用,如果你要使用POJO或其他object代替EJB引用,你只需要改動組件定義xml,而不影響代碼。
           

          posted on 2005-10-21 22:20 EA_Games 閱讀(304) 評論(0)  編輯  收藏 所屬分類: Spring

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
           
          Copyright © EA_Games Powered by: 博客園 模板提供:滬江博客
          主站蜘蛛池模板: 永年县| 西青区| 鹰潭市| 万州区| 鹤山市| 宜兰县| 大渡口区| 北安市| 泸西县| 伊宁市| 古蔺县| 丰镇市| 霞浦县| 雷山县| 四会市| 平果县| 郑州市| 上高县| 沭阳县| 兰坪| 巫溪县| 平和县| 裕民县| 麻江县| 修武县| 永嘉县| 石嘴山市| 清镇市| 商都县| 内江市| 南宫市| 新泰市| 吴忠市| 东丰县| 乐昌市| 陆河县| 曲水县| 康保县| 依兰县| 洪洞县| 黎城县|