欧美一区二区三区四区五区,人人看人人艹,亚洲一区二区中文,99精品视频99,亚洲精品欧美综合四区,国产三区视频在线观看,日韩在线观看一区二区,久久精品色
主辦單位:全國創爭活動指導協調小組 中華職工學習網首頁 情景站 聯系電話:010-68232149
科學研究人員 | 工程技術人員 | 購銷人員 | 倉儲人員 | 運輸服務人員 | 體育工作人員 | 教學人員 | 購銷人員

Spring框架的事務管理應用分析

http://m.dcyhziu.cn  2007/6/5 源自:中華職工學習網 【字體: 字體顏色

在軟件開發中出現過各種各樣的框架,開源軟件的興起,使得各種各樣的框架紛紛出現,例如,Apache組織下就擁有諸多的框架類產品。框架就是一組協同工作的類,它們為特定類型的軟件構筑了一個可重用的設計。然而,傳統的框架使得應用程序組件過分依賴于框架中的類,這種耦合度的提高降低了組件的復用性。Spring框架的出現,使得組件之間更松散的耦合成為了可能。

  Spring框架簡介

  Spring框架是一個2003年2月才出現的開源項目,該開源項目起源自Rod Johnson在2002年末出版的《Expert One-on-One J2EE Design and Development》一書中的基礎性代碼。在該書中,Rod Johnson倡導J2EE實用主義的設計思想,而Spring框架正是這一思想的更全面和具體的實現。Spring框架由一個容器,一個配置和組織組件的框架,和一組內置的為事務、持久化和Web用戶接口提供的服務組成。作為一種輕量級的J2EE框架,Spring提供了一種有效的方式來建立和組織J2EE應用程序。

  1、Spring特性

  IoC(Inversion of Control;控制反轉);又稱DI(Dependency Injection;依賴注入);是面向對象領域新興的編程思想;也是Spring的精髓所在。簡單地說;IoC就是指程序之間的關系由容器來控制;而不是傳統實現中由程序代碼直接操控。這也就是所謂“控制反轉”的概念所在:控制權由應用代碼轉到外部容器,控制權的轉移,也就是所謂的反轉。IoC將控制創建的職責搬進了框架中;并把它從應用代碼脫離開來。當使用Spring的IoC容器時只需指出組件需要的對象,在運行時Spring的IoC容器會根據XML配置數據提供給它。

  Spring IoC,借助于依賴注入設計模式,使得開發者不用理會對象自身的生命周期極其關系,而且能夠改善開發者對模式的使用。對于一個對象的管理不是什么困難,難就難在對整個對象群的管理。依賴注入可以讓容器管理對象,即“Don’t call me, I will call you”。這樣對象本身的生命周期以及對象之間的關系就不再讓開發者費神了。

  Spring AOP,借助于Spring實現攔截器,開發者能夠實現以聲名方式使用企業級服務,比如安全性服務、事務服務。AOP 合理的補充了OOP,借助于Spring AOP,開發者能夠高效的使用J2EE服務。

  Spring服務抽象,借助于各種J2EE API抽象,使得開發者能夠一致地使用J2EE 技術,而不管具體是使用什么J2EE API,借助于Spring服務抽象,使代碼大大減少,滿足“更少代碼,更少BUG”的軟件設計原則。

  Spring IoC+Spring AOP+Spring服務抽象,一起形成Spring,這樣一個有機體,使構建輕量級J2EE成為可能。

  Spring提供的事務管理

  Spring提供的事務管理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復的代碼比較多;聲明式的比編程式的更靈活方便。

  1、傳統使用JDBC的事務管理

  以往使用JDBC進行數據操作,使用DataSource,從數據源中得到Connection,我們知道數據源是線程安全的,而連接不是線程安全的,所以對每個請求都是從數據源中重新取出一個連接。一般的數據源由容器進行管理,包括連接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等這些J2EE商業容器都提供了這個功能。

  以往的我們使用JDBC在寫代碼時,事務管理可能會是這樣:

Connection conn = null;
try{
 conn = DBConnectionFactory.getConnection;
 conn.setAutoCommit(false);
 //do something
 conn.commit(); //commit transcation
}catch(Exception e){
 conn.rollback();
}
finally{
 try{
  conn.close();
 } catch(SQLException se){ //do sth.}
 //close ResultSet,PreparedStatement,Connection
 //notice:Maybe ocurr Exception when u close rs,pstmt,conn
}

  按照以往的思路來寫代碼,代碼量比較長,而且容易疏忽,忘掉一些try/catch,引發一些異常無法catch,雖然有時候我們會寫DBTool類,來關閉這些資源,并且保證在關閉這些資源時,不向外拋異常,但是這樣做會導致額外的麻煩。

  2、Spring提供的編程式的事務處理

  Spring提供了幾個關于事務處理的類:TransactionDefinition //事務屬性定義

  TranscationStatus //代表了當前的事務,可以提交,回滾。

  PlatformTransactionManager這個是spring提供的用于管理事務的基礎接口,其下有一個實現的抽象類AbstractPlatformTransactionManager,我們使用的事務管理類例如DataSourceTransactionManager等都是這個類的子類。
  我們使用編程式的事務管理流程可能如下:

  (1) 聲明數據源。

  (2) 聲明一個事務管理類,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等

  (3) 在我們的代碼中加入事務處理代碼:

TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try{
 //do sth
 transactionManager.commit(ts);
}catch(Exception e){transactionManager.rollback(ts);}

  使用Spring提供的事務模板TransactionTemplate:

void add()
{
 transactionTemplate.execute( new TransactionCallback(){
  pulic Object doInTransaction(TransactionStatus ts)
  { //do sth}
 }
}

  TransactionTemplate也是為我們省去了部分事務提交、回滾代碼;定義事務模板時,需注入事務管理對象。

  3、Spring聲明式事務處理

  Spring聲明式事務處理也主要使用了IoC,AOP思想,提供了TransactionInterceptor攔截器和常用的代理類TransactionProxyFactoryBean,可以直接對組件進行事務代理。

  使用TransactionInterceptor的步驟:

  (1)定義數據源,事務管理類

  (2)定義事務攔截器,例如:

<bean id = "transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource">
<value>
com.test.UserManager.*r=PROPAGATION_REQUIRED
</value>
</property>
</bean>

  (3)為組件聲明一個代理類:ProxyFactoryBean

<bean id="userManager" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces"><value>com.test.UserManager</value></property>
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
</list>
</property>
</bean>

  使用TransactionProxyFactoryBean:

<bean id="userManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target"><ref local="userManagerTarget"/></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>

  TransactionProxyFactoryBean只是為組件的事務代理,如果我們要給組件添加一些業務方面的驗證等,可以使用TransactionTemplate加攔截器方式,為組件添加多個攔截器,spring AOP中提供了三類Advice,即前增強,后增強,拋出異常時的增強,可以靈活使用。

  結束語

  Spring可以簡單的把普通的java class納入事務管理,聲明性的事務操作起來也很容易。有了Spring之后,聲明性事務不再是EJB獨有,我們不必為了獲得聲明性事務的功能而去忍受EJB帶來的種種不便。Spring還提供了惟一的事務管理抽象,它能夠在各種底層事務管理技術(如JTA或者JDBC)之上提供一個一致的編程模型。

  相關鏈接
  相關評論
主站蜘蛛池模板: 亚洲欧美日韩国产综合精品二区| 中文乱码字幕永久永久电影| 久久狠狠高潮亚洲精品| 久久九九国产精品| 国产69精品久久久久999小说| 国产精品欧美久久久久一区二区| 欧美日韩九区| 91精品国产一区二区三区| 国产精品乱码久久久久久久| 欧美精品国产精品| 欧美精品日韩精品| 日韩夜精品精品免费观看| 91精品丝袜国产高跟在线| 黄色av免费| 一本久久精品一区二区| 日本道欧美一区二区aaaa| 国产精品国外精品| 精品国产一二三四区| 午夜剧场伦理| 中文字幕制服狠久久日韩二区| 国产伦精品一区二区三 | 国产精品网站一区| 国产91热爆ts人妖系列| 91久久国产视频| 欧美一区二区三区另类| 91性高湖久久久久久久久_久久99| 亚洲欧美国产中文字幕| 久久人人97超碰婷婷开心情五月 | 久久久久久综合网| 丰满岳乱妇在线观看中字| 国产91色综合| 亚洲欧美另类国产| 久久精品国产亚洲7777| 精品无码久久久久国产| 99re久久精品国产| 精品一区二区在线视频| 国产精品suv一区二区6| 91精品福利在线| 日韩精品久久一区二区| 午夜一级电影| 欧美一区二三区| 欧美精品二区三区| 夜夜嗨av一区二区三区中文字幕| 国产精品白浆一区二区| 一区二区三区毛片| 日韩中文字幕亚洲欧美| 国产日韩麻豆| 国产99视频精品免视看芒果| 欧美一区二区三区久久综合| 99精品久久99久久久久| 91精品一区在线观看| 国产精品久久久久久久久久久新郎 | 亚洲精品主播| 韩国视频一区二区| 午夜wwwww| 亚洲精品久久久久不卡激情文学| 久久99精品国产| 狠狠色成色综合网| 国产人澡人澡澡澡人碰视| 九一国产精品| 国产一区www| 少妇高潮大叫喷水| 狠狠色狠狠色综合久久第一次| av素人在线| 激情久久综合| 亚洲一卡二卡在线| 精品国产九九九| 色一情一乱一乱一区99av白浆| 免费欧美一级视频| 精品国产区一区二| 在线中文字幕一区| 国产乱对白刺激在线视频| 亚洲欧美日韩在线看| 国产三级在线视频一区二区三区| 国产精品视频二区不卡| 一区二区欧美精品| 国产精品美女久久久免费| 国产精品免费一视频区二区三区| 李采潭伦理bd播放| 二区三区视频| 国产一区=区| 高清欧美精品xxxxx在线看|