<%@ page contentType="text/html; charset=gb2312"%> J2EE进阶:Spring框架的事务管理及应用
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
J2EE进阶:Spring框架的事务管理及应用
     发布者: 发布时间:2008-01-16
Spring框架简介

Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的《Expert One-on-One J2EE Design and Development》一书中的基础性代码。在该书中,Rod Johnson倡导J2EE实用主义的设计思想,而Spring框架正是这一思想的更全面和具体的实现。Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。作为一种轻量级的J2EE框架,Spring提供了一种有效的方式来建立和组织J2EE应用程序。

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(){
public 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)之上提供一个一致的编程模型。
    

 
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
使用ActionForward优化Struts应用程序
实例讲解在JSP开发中的对象和范围属性
技巧:JSP中把动态页面转换为静态页面
Java Web应用程序:JSF技术的详细介绍
新手入门:实例讲解Java中的接口的作用
Java异常框架设计
 
最近评论:
        
回复:J2EE进阶:Spring框架的事务管理及应用
rs gold runescape gold rs gold runescape gold 成人用品 看護師求人 薬剤師求人 crm saas 展览公司 展览公司 北京展览公司 展览展示 展台设计 展台设计< 电话会议 会议电话 协同办公 guild wars gold gw gold Maple Story Mesos Maple Mesos cheap guild wars gold guild wars money buy guild wars gold gw money cheap guild wars money cheap gw money MapleStory Mesos Maple Story Meso buy Maple Story Mesos cheap Maple Story Mesos buy Maple Meso cheap MapleStory Mesos cheap Maple Story Meso
        
回复:J2EE进阶:Spring框架的事务管理及应用
wow power leveling wow gold powerleveling power leveling 薬剤師求人 gold wow world of warcraft gold cheap wow gold gw gold Maple Story Mesos cheap guild wars gold buy guild wars gold buy Maple Story Mesos cheap gw money MapleStory Mesos cheap Maple Story Meso runescape gold runescape sale runescape items runescape gp rs power leveling rs gold runescape money
        
回复:J2EE进阶:Spring框架的事务管理及应用
crm saas 展览公司 展览公司 北京展览公司 展览展示 展台设计 展台设计 电话会议 会议电话 协同办公 猎头 OCR OCR 高速扫描 手机词典 激光打标机 激光加工 激光喷码机 激光打码机 北京激光加工 激光打标机 激光加工 激光喷码机 激光打码机 噪音治理 噪声治理 隔音屏 隔声屏
        
回复:J2EE进阶:Spring框架的事务管理及应用
crm saas 展览公司 展览公司 北京展览公司 展览展示 展台设计 展台设计 电话会议 会议电话 协同办公 猎头 OCR OCR 高速扫描 手机词典 激光打标机 激光加工 激光喷码机 激光打码机 北京激光加工 激光打标机 激光加工 激光喷码机 激光打码机 噪音治理 噪声治理 隔音屏 隔声屏
        
我想告诉你!
ffxi gil,ffxi gil,ffxi gil,final fantasy xi gil, max(7687)
        
我想告诉你!
ffxi gil,ffxi gil,ffxi gil,final fantasy xi gil, max(7173)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(7943)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(9030)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(9065)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(255)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号