Spring 高階特性------資料持久層

abcbbc發表於2007-05-12

資料持久層.

事務管理持久層封裝

JDBC

Hibernate in Spring

ibatis in Spring

[@more@]對於J2EE 應用程式而言,事務的處理一般有兩種模式: 1. 依賴特定事務資源的事務處理這是應用開發中最常見的模式,即透過特定資源提供的事務機制進行事務管理。如透過JDBC、JTA 的rollback、commit方法;Hibernate Transaction 的 rollback、commit方法等。這種方法大家已經相當熟悉。 2. 依賴容器的引數化事務管理透過容器提供的集約式引數化事務機制,實現事務的外部管理,如EJB 中的事務管理模式。 配置中包含了dataSource,transactionManager 等資源定義。這些資源都為一個名為userDAOProxy 的TransactionProxyFactoryBean 服務, 而 userDAOProxy 則對包含實際資料邏輯的userDAO進行了事務性封裝。 Spring事務管理能給我們帶來什麼? 對於傳統的基於特定事務資源的事務處理而言(如基於JDBC 的資料庫訪問), Spring並不會對其產生什麼影響,我們照樣可以成功編寫並執行這樣的程式碼。同時,對於依賴容器的引數化事務管理而言,Spring 則表現出了極大的價值。Spring 本身也是一個容器,只是相對EJB容器而言,Spring顯得更為輕便小巧。我們無需付出其他方面的代價,即可透過Spring實現基於容器的事務管理(本質上來講,Spring 的事務管理是基於動態AOP)。下面這段xml配置片斷展示了Spring中的事務設定方式: org.gjt.mm.mysql.Driver jdbc:mysql://localhost/sample user mypass PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly 配置中包含了dataSource,transactionManager 等資源定義。這些資源都為一個名為userDAOProxy 的TransactionProxyFactoryBean 服務, 而 userDAOProxy 則對包含實際資料邏輯的userDAO進行了事務性封裝。 結合上面這段申明帶來的感性認知,看看Spring 的事務管理機制與EJB 中事務管理有何不同,或者有何優勢。這裡自然有許多方面可以比較,不過,筆者認為其中最為關鍵的兩點是: 1. Spring可以將任意Java Class 納入事務管理這裡的UserDAO只是我們編寫的一個普通Java Class,其中包含了一些基本的資料應用邏輯。透過Spring,我們即可簡單的實現事務的可配置化。也就是說,我們可以隨意為某個類的某個方法指定事務管理機制。與之對比,如果使用EJB容器提供的事務管理功能,我們不得不按照EJB 規範編將UserDAO 進行改造,將其轉換為一個標準的EJB。 2. Spring事務管理並不依賴特定的事務資源。 EJB 容器必須依賴於JTA 提供事務支援。而Spring 的事務管理則支援 JDBC、JTA 等多種事務資源。這為我們提供了更多的選擇,從而也使得我們的系統部署更加靈活。 Spring對JDBC進行了良好的封裝,透過提供相應的模板和輔助類,在相當程度上降低了JDBC操作的複雜性。並且得益於Spring良好的隔離設計,JDBC封裝類庫可以脫離 Spring Context獨立使用,也就是說,即使系統並沒有採用Spring作為結構性框架,也可以單獨使用Spring的JDBC部分(spring-dao.jar)來改善我們的程式碼。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219138/viewspace-914799/,如需轉載,請註明出處,否則將追究法律責任。

相關文章