<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 1,  comments - 0,  trackbacks - 0
    SPRING框架——由來和發展

      Springjava平臺上的一個開源應用框架。它的第一個版本是由Rod Johnson寫出來的。Rod在他的Expert One-On-One Java EE Design and Development(Java企業應用設計與開發的專家一對一)一書中首次發布了這個框架。該框架也可以移植到.NET的環境下。

      Spring的框架首次在2003年6月的Apache 2.0的使用許可中發布。第一個具有里程碑意義的版本是2004年3月發布的1.0。2004年9月和2005年3月先后又有重要的版本面世。

      Spring框架本身并沒有強制實行任何特別的編程模式。在Java社區里,Spring作為EJB模型之外的另外一個選擇甚至是替代品而廣為流行。從設計上看,Spring給予了Java程序員許多的自由度,但同時對業界常見的問題也提供了良好的文檔和易于使用的方法。

      Spring框架的核心功能在任何Java應用中都是適用的。在基于Java企業平臺上的web應用中,大量的拓展和改進得以形成。為此,Spring獲得了廣泛的歡迎,并被許多公司認可為具有戰略意義的重要框架。

      1. Spring框架的歷史

      Spring框架最開始的部分是由Rod Johnson于2000年為倫敦的金融界提供獨立咨詢業務時寫出來的。在《Java企業應用設計與開發的專家一對一》一書中,Rod進一步拓展了他的代碼,以闡述“如何讓應用程序能以超出當時大眾所慣于接受的易用性和穩定性與J2EE平臺上的不同組件合作”的觀點。

      在2001年,web應用的主流編程模式為Java Servlet API和EJB。兩者都是由太陽微系統公司與其他一些開發商和利益團體提出的,并在Java業界里獲得了廣泛的共識。那些非Web的應用,比如用戶端的或批處理的應用,也可以基于能夠提供所需功能的開源或商用工具和項目。

      基于最優方法并適用于各種應用類型的Spring框架的建立要歸功于Rod Johnson。這些想法也在他的書中得以闡述。書發表后,基于讀者的要求,源代碼在開源使用協議下得以提供。

      一批自愿拓展Spring框架的程序開發員組成了團隊,2003年2月在Sourceforge上構建了一個項目。在Spring框架上工作了一年之后,這個團隊在2004年3月發布了第一個版本(1.0)。這個版本之后,Spring框架在Java社區里變得異常流行,部分的要歸結于它好于一般水準的文檔功能和參考文獻,特別是對于一個開源項目而言尤其如此。

      但是,Spring框架在2004年也備受批評,有時它也成為熱烈爭論的主題。Spring的第一個版本發布時,許多程序員和領先的設計人員把它看作是遠離傳統編程模式的一步;特別是對于EJB而言尤其如此。Spring框架的一個重要設計目標就是更容易地與已有的J2EE標準和商用工具整合。在很大程度上,這個目標使得通過受爭議的官方委員會控制的規范文檔來定義功能變得可有可無。

      Spring框架使之前并不受歡迎的技術在短時間內迅速走紅,最有名的例子就是反向控制(IOC)。2004年,Spring框架的采用率非常之高;通過推出自身的AOP(面向方向的編程),Spring使AOP整體而言在Java社區里廣受歡迎。

      2005年,Spring因具有里程碑意義的新的版本的推出,更多功能的添加,從而得到了比2004年更高的采用率。2004年底創建的Spring論壇也對框架的推廣而推波助瀾。論壇對廣大用戶而言已經成為最重要的信息和幫助的源泉。

      2005年,Spring框架的開發人員成立了自己的公司,來提供對Spring的商業支持,其中最顯著的就是與BEA的合作。2005年12 月,第一個Spring會議在邁阿密舉行,3天的課程吸引了300名開發人員。2006年6月在安特衛普召開的會議有400多名開發人員。

      2. Spring框架的主要功能

      • 基于Java Beans的配置管理,采用IOC的原理,特別是對依賴注射技術的使用。這些都用來減少各組件間對實施細則的相互依賴性。

      • 一個核心的,全局適用的bean工廠

      • 一個一般抽象化的層面來管理數據庫間的數據處理

      • 建立在框架內的,對Java數據處理API和單獨的JDBC數據源的一般性策略。因此,在數據處理支持上對Java企業版本環境的依賴性得以消除

      • 和一些可持續性的框架,如Hibernate,JDO,iBATIS和db4o,的整合

      • web應用中的MVC框架,基于核心的Spring功能,支持多種產生視圖的技術,包括JSP,FreeMarker,Velocity,Tiles,iText,和POI

      • 大量的AOP框架以提供諸如數據處理管理的服務。同IOC的功能一樣,目的是提高系統的模塊化程度

    Spring 框架的七個模塊

      Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和管理 bean 的方式,如圖 1 所示。

      

      組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:

      核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開。

      Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。

      Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。

      Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

      Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

      Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基于 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

      Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

      Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用于不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。

     Spring框架的主要功能

      組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:

      核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開。

      Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。

      Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。

      Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

      Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

      Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基于 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

      Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

      Spring 框架的功能可以用在任何 J2EE 服務器中,大多數功能也適用于不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。

    Spring事務管理

      在學習spring事務管理時,我忍不住要問,spring為什么進行事務管理,spring怎么進行的事務管理?

      首先,為什么要進行事務,接下來說說spring是怎樣進行事務管理的.

      ① Spring事務策略

      Spring事務策略,也就是spring事務管理的實現方式.它有一個統一的抽象是由實現下面這個接口完成的.

      org.springframework.transaction.PlatformTransactionManager

      此接口的內容如下:

      Public interfacePlatformTransactionManager()...{

      TransactionStatue getTransaction(TransactionDefinition definition) throws TransactionException;

      Void commit(TransactionStatus status) throws TransactionException;

      Void rollback(TransactionStatus status) throws TransactionException;

      }

      不管是聲明式的還是編程式的事務管理都需要此抽象來完成.

      解釋一下這個接口,這樣可以更好的理解spring的事務控制的原理.

      getTransaction()根據類型為TransactionDefinition的參數返回一個TransactionStatus對象.返回的TransactionStatus對象可能代表一個新的或已經存在的事務(如果在當前調用堆棧有一個符合條件的事務).如同J2EE事務上下文,一個TransactionStatus也是和執行的線程關聯的.

      同時,在框架中還存在TransactionDefinition接口,即上邊的參數類型.此接口指定了事務隔離程度、事務傳播、事務超時、只讀狀態。

      另外,還有TransactionStatus接口。這個接口為處理事務提供簡單的控制事務執行和查詢事務狀態的方法。

     ?、?兩種事務管理方式:編程式、聲明式。

      Spring提供兩種方式的編程式事務管理,分別是:使用TransactionTemplate和直接使用PlatformTransactionManager。

     ?、? TransactionTempale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一樣的方法。它使用回調方法,把應用程序從處理取得和釋放資源中解脫出來。如同其他模板,TransactionTemplate是線程安全的。

      代碼片段:

      Object result =tt.execute(newTransactionCallback()...{

      publicObject doTransaction(TransactionStatus status)...{

      updateOperation();

      returnresultOfUpdateOperation();

      }

      });

      使用TransactionCallback()可以返回一個值。

      如果使用TransactionCallbackWithoutResult則沒有返回值。

      ⅱ. 也可以使用PlatformTransactionManager直接管理事務。簡單地通過一個bean引用給你的bean傳遞一個你使用的 PlatformTransaction對象。然后,使用TransactionDefinition和TransactionStatus對象就可以發起、回滾、提交事務。

      如下片段:

      DefaultTransactionDefinition def=newDefaultTransactionDefinition(); //new 一個事務

      def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); //初始化事務,參數定義事務的傳播類型;

      TransactionStatus status =transactionManager.getTransaction(def); //獲得事務狀態

      try...{

      ……………..

      transactionManager.commit(status); //提交事務;

      }catch(…..)...{

      transactionManager.rollback(status); //回滾事務;

      }

      Spring也提供聲明式事務管理。這是通過AOP實現的。

      大多數Spring用戶選擇聲明式事務管理,這是最少影響應用代碼的選擇,因而這是和非侵入性的輕量級容器的觀念是一致的。

     ?、?通常通過TransactionProxyFactoryBean設置Spring事務代理。需要一個目標對象包裝在事務代理中。這個目標對象一般是一個普通Javabean。當我們定義TransactionProxyFactoryBean時,必須提供一個相關的 PlatformTransactionManager的引用和事務屬性。事務屬性含有事務定義。例如:

      PROPAGATION_REQUIRED,-MyCheckedException

      PROPAGATION_REQUIRED

      PROPAGATION_REQUIRED,readOnly

      事務代理會實現目標對象的接口:這里是屬性名是target的引用。id是transactionServiceControl。(●使用 CGLIB也可以實現具體類的代理。只要設置proxyTargetClass屬性為true即可。如果目標對象沒有實現任何接口,這將自動設置該屬性為 true。通常,我們希望面向接口編程。) ●使用proxyInterfaces屬性來限定事務代理來代理指定接口也是可以。 ●也可以通過從org.springframework.aop.framework.ProxyConfig繼承或所有AOP代理工廠共享的屬性來定制 TransactionProxyFactoryBean行為。

      然后,說說屬性名是transactionAttributes意義:

      這里的transactionAttributes屬性是定義在 org.springframework.transaction.interceptor.NameMathTransactionAttributeSource 中的屬性格式設置。這個包括通配符的方法名稱映射是很直觀的,如”insert*”。注意insert*的映射的值包括回滾規則。”- MyCheckException”指定如果方法拋出MyCheckException或它的子類,事務會自動回滾??梢杂枚禾柗指舳鄠€回滾規則。“-” 前綴強制回滾,“+”前綴指定提交(這允許即使拋出unchecked異常時也可以提交事務)。“PROPAGATION_REQUIRED”指定事務傳播范圍。

      TransactionProxyFactoryBean允許你通過“preInterceptors”和 “postInterceptors”屬性設置前或后的攔截操作。可以設置任意數量的前和后通過,它們的類型可以是Advistor(切入點),MethodInterceptor或被當前Spring配置支持的通知類型。例如:ThrowAdvice,AfterReturningAdvice或BeforeAdvice。這些通知必須支持實例共享模式。如果你需要高級 AOP特性操作事務,通過org.springframework.aop.framework.ProxyFactoryBean,而不是 TransactionProxyFactory實用代理創建者。

     ?、?另一種聲明方式:BeanNameAutoProxyCreator

      使用TransactionProxyFactoryBean當事務代理包裝對象,你可以完全控制代理。如果需要用一致方式包裝大量bean。使用一個BeanFactoryPostProcessor的一個實現,BeanNameAutoProxyCreator,可以提供另外一種方法。(Spring中,一旦ApplicationContext讀完它的初始化信息,它將初始化所有實現BeanPostProcessor接口的 bean,并且讓它們后處理ApplicationContext中所有其他的bean。所以使用這種機制,正確配置的 BeanNameAutoProxyCreator可以用來后處理所有ApplicationContext中所有其他的bean),并且把它們用事務代理包裝起來。真正生成的事務代理和使用TransactionProxyFactoryBean生成的基本一致。

      最后,總結一下Spring的優點:

      Spring是java平臺上的一個開源應用框架。 Spring框架本身并沒有強制實行任何特別的編程模式。在Java社區里,Spring作為EJB模型之外的另外一個選擇甚至是替代品而廣為流行。從設計上看,Spring給予了Java程序員許多的自由度,但同時對業界常見的問題也提供了良好的文檔和易于使用的方法。 Spring框架的核心功能在任何Java應用中都是適用的。在基于Java企業平臺上的web應用中,大量的拓展和改進得以形成。為此,Spring獲得了廣泛的歡迎,并被許多公司認可為具有戰略意義的重要框架。

    posted on 2009-03-02 17:11 ID刀 閱讀(444) 評論(0)  編輯  收藏 所屬分類: Spring

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(2)

    隨筆檔案(1)

    文章分類(21)

    文章檔案(17)

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 13651
    • 排名 - 2092

    最新評論

    主站蜘蛛池模板: 久久九九兔免费精品6| 亚洲精品自产拍在线观看| 日本一区二区三区日本免费| 亚洲成aⅴ人片在线观| 久久国产精品2020免费m3u8| 亚洲av无码专区国产乱码在线观看| 亚洲情a成黄在线观看动漫尤物| 亚洲精品无码久久久久秋霞| 无人在线观看完整免费版视频| 亚洲国产婷婷香蕉久久久久久| 亚洲美女色在线欧洲美女| 久久久免费精品re6| AV在线播放日韩亚洲欧| 国产免费阿v精品视频网址| 久久精品九九亚洲精品天堂| 国产午夜成人免费看片无遮挡| 免费涩涩在线视频网| 亚洲伊人久久大香线蕉苏妲己| 人妻巨大乳hd免费看| 67194成是人免费无码| 亚洲精品无码久久久久YW| 内射无码专区久久亚洲| 亚洲无mate20pro麻豆| 日本一区免费电影| 亚洲国产精品xo在线观看| 久久久免费观成人影院| 麻豆亚洲AV永久无码精品久久| 免费人成再在线观看网站 | 亚洲国产美女视频| 99在线免费观看| 亚洲精品国产第1页| 日韩激情淫片免费看| 你懂的网址免费国产| 中文字幕亚洲综合小综合在线| 99久久人妻精品免费二区| 久久亚洲精品成人| 最近中文字幕mv免费高清电影| 亚洲免费在线观看视频| 免费大黄网站在线观| 日本在线看片免费人成视频1000| 国产精一品亚洲二区在线播放 |