`
esffor
  • 浏览: 1370859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

J2EE进: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应用程序。
  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)之上提供一个一致的编程模型。
  
分享到:
评论

相关推荐

    Spring 框架的事务管理及应用

    ### Spring框架的事务管理及应用 #### Spring框架概述 Spring框架是一个开源项目,最早出现在2003年2月,其起源可以追溯到Rod Johnson在2002年末出版的书籍《Expert One-on-One J2EE Design and Development》中的...

    Spring框架的事务管理应用分析.doc

    【Spring框架的事务管理应用分析】 Spring框架是一个在2003年推出的开源项目,它的核心设计理念源于Rod Johnson的《Expert One-on-One J2EE Design and Development》一书中的实用主义J2EE思想。Spring框架主要包括...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面...

    J2EE项目实训Spring框架技术.rar

    Spring框架是Java企业版(J2EE)开发中的核心组件,尤其在现代企业级应用程序中,Spring被广泛用于构建高效、可维护的Web应用。这个"J2EE项目实训Spring框架技术"压缩包可能包含一系列关于如何在实际项目中运用...

    基于J2EE架构的SSH框架研究及应用

    ### 基于J2EE架构的SSH框架研究及应用 #### 一、J2EE架构的多层体系介绍 J2EE(Java 2 Platform, Enterprise Edition)架构以其先进的设计理念和技术特性,成为了构建企业级应用程序的标准平台。该架构遵循多层...

    J2EE项目实训Spring框架技术

    在本J2EE项目实训中,我们将深入探讨Spring框架的核心技术和应用。Spring是Java企业级应用开发中的一个关键组件,它提供了一整套强大的服务,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、Web MVC...

    Spring框架应用案例

    Spring框架是中国著名的Java企业级应用开发框架,由Rod Johnson在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它旨在简化Java应用程序的开发,通过依赖注入(Dependency Injection,DI)和...

    J2EE实例:电子商城系统.rar

    4. **Spring框架**:Spring是Java开发中的核心框架,它提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,可以极大地简化J2EE应用的开发。在这个系统中,Spring可能被用来管理Bean的生命周期,...

    J2EE项目实训Spring框架技术及在线商城项目源程序和BBS论坛社区项目源程序

    Spring框架是Java企业级应用开发中的核心框架,它简化了应用程序的开发,提供了全面的编程和配置模型。这个实训项目包含两个部分:在线商城项目源程序和BBS论坛社区项目源程序,旨在帮助初学者深入理解和掌握Spring...

    J2EE教程: Struts+Spring+JSF+Hibermate+EJB+XML+WebService+Ajax(part2)

    在提供的压缩包文件中,我们看到Spring4.rar、Ajax2.rar、WebService.rar、Ajax1.rar和xml.rar,这些分别对应了Spring框架、Ajax技术和Web Service相关的资源。学习和掌握这些内容,将使你具备构建高效、现代化J2EE...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 1.2.2 Web组件 1.2.3 业务逻辑组件 1.3 J2EE容器 1.3.1 容器服务 1.3.2 容器类型 1.4 J2EE核心技术 1.4.1 Servlet 1.4.2 JSP(Java服务页面...

    多图详解Spring框架的设计理念与设计模式.pdf

    - **企业级应用开发**:Spring框架提供了一系列企业级应用所需的功能,如事务管理、安全性和消息传递等。 - **微服务架构**:随着微服务架构的兴起,Spring Cloud提供了全面的支持,帮助开发者构建、部署和监控...

    精通J2EE—Eclipse Struts Hibernate Spring 整合应用案例源代码1

    《精通J2EE—Eclipse Struts Hibernate Spring 整合应用案例源代码1》这个压缩包文件主要包含了一个基于J2EE平台的、利用Eclipse开发工具,整合Struts、Hibernate和Spring框架的综合应用案例的源代码。这些源代码是...

    多图详解Spring框架的设计理念与设计模式

    - **用途**:Spring框架通过策略模式实现了事务管理等功能的插拔式实现。 - **优势**:使得事务管理机制可以根据具体的应用场景进行灵活调整。 6. **观察者模式**: - **作用**:Spring框架利用观察者模式实现...

    精通J2EE--Eclipse、Struts、Hibernate及Spring整合应用案例全书

    Spring框架则是企业级Java应用的核心容器,它提供了依赖注入(DI)和面向切面编程(AOP)等特性,可以与其他框架如Struts和Hibernate无缝集成。Spring还包含了用于数据访问、Web应用、事务管理等模块,极大地简化了...

Global site tag (gtag.js) - Google Analytics