快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门24小时官网: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便是指法度榜样之间的关系由容器来节澳门24小时官网制;而不是传统实现中由法度榜样代码直接操控。这也便是所谓“节制反转”的观点所在:节制权由利用代码转到外部容器,节制权的转移,也便是所谓的反转。IoC将节制创建的职责搬进了框架中;并把它从利用代码离开开来。当应用Spring的IoC容器时只需指出组件必要的工具,在运行时Spring的IoC容器会根据XML设置设置设备摆设摆设数据供给给它。

Spring IoC,借助于依附注入设计模式,使得开拓者不用理会工具自身的生命周期及其关系,而且能够改良开拓者对模式的应用。对付一个工具的治理不是什么艰苦,难就难在对全部工具群的治理。依附注入可以让容器治理工具,即“Don’澳门24小时官网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);

tr澳门24小时官网y{

//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澳门24小时官网="transactionManager"/></property>

<property name="transactionAttributeSource澳门24小时官网">

<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>

您可能还会对下面的文章感兴趣: