Spring事务配置的五种方式
原文地址:Spring事务配置的五种方式
作者:OOKK6688
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configLocation"
value
="classpath:hibernate.cfg.xml"
/>
<
property
name
="configurationClass"
value
="org.hibernate.cfg.AnnotationConfiguration"
/>
</
bean
>
<!--
定义事务管理器(声明式的事务)
-->
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionMana ger"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<!--
配置DAO
-->
<
bean
id
="userDaoTarget"
class
="com.bluesky.spring.dao.UserDaoImpl"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<
bean
id
="userDao"
class
="org.springframework.transaction.interceptor.TransactionProxyFactoryB ean"
>
<!--
配置事务管理器
-->
<
property
name
="transactionManager"
ref
="transactionManager"
/>
<
property
name
="target"
ref
="userDaoTarget"
/>
<
property
name
="proxyInterfaces"
value
="com.bluesky.spring.dao.GeneratorDao"
/>
<!--
配置事务属性
-->
<
property
name
="transactionAttributes"
>
<
props
>
<
prop
key
="*"
>
PROPAGATION_REQUIRED
</
prop
>
</
props
>
</
property
>
</
bean
>
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
</ beans >
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configLocation"
value
="classpath:hibernate.cfg.xml"
/>
<
property
name
="configurationClass"
value
="org.hibernate.cfg.AnnotationConfiguration"
/>
</
bean
>
<!--
定义事务管理器(声明式的事务)
-->
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionMana ger"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<
bean
id
="transactionBase"
class
="org.springframework.transaction.interceptor.TransactionProxyFactoryB ean"
lazy-init
="true"
abstract
="true"
>
<!--
配置事务管理器
-->
<
property
name
="transactionManager"
ref
="transactionManager"
/>
<!--
配置事务属性
-->
<
property
name
="transactionAttributes"
>
<
props
>
<
prop
key
="*"
>
PROPAGATION_REQUIRED
</
prop
>
</
props
>
</
property
>
</
bean
>
<!--
配置DAO
-->
<
bean
id
="userDaoTarget"
class
="com.bluesky.spring.dao.UserDaoImpl"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<
bean
id
="userDao"
parent
="transactionBase"
>
<
property
name
="target"
ref
="userDaoTarget"
/>
</
bean
>
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
</ beans >
第三种方式:使用拦截器
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configLocation"
value
="classpath:hibernate.cfg.xml"
/>
<
property
name
="configurationClass"
value
="org.hibernate.cfg.AnnotationConfiguration"
/>
</
bean
>
<!--
定义事务管理器(声明式的事务)
-->
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionMana ger"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<
bean
id
="transactionInterceptor"
class
="org.springframework.transaction.interceptor.TransactionInterceptor"
>
<
property
name
="transactionManager"
ref
="transactionManager"
/>
<!--
配置事务属性
-->
<
property
name
="transactionAttributes"
>
<
props
>
<
prop
key
="*"
>
PROPAGATION_REQUIRED
</
prop
>
</
props
>
</
property
>
</
bean
>
<
bean
class
="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator "
>
<
property
name
="beanNames"
>
<
list
>
<
value
>
*Dao
</
value
>
</
list
>
</
property
>
<
property
name
="interceptorNames"
>
<
list
>
<
value
>
transactionInterceptor
</
value
>
</
list
>
</
property
>
</
bean
>
<!--
配置DAO
-->
<
bean
id
="userDao"
class
="com.bluesky.spring.dao.UserDaoImpl"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
</ beans >
第四种方式:使用tx标签配置的拦截器
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>
<
context:annotation-config
/>
<
context:component-scan
base-package
="com.bluesky"
/>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configLocation"
value
="classpath:hibernate.cfg.xml"
/>
<
property
name
="configurationClass"
value
="org.hibernate.cfg.AnnotationConfiguration"
/>
</
bean
>
<!--
定义事务管理器(声明式的事务)
-->
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionMana ger"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
<
tx:advice
id
="txAdvice"
transaction-manager
="transactionManager"
>
<
tx:attributes
>
<
tx:method
name
="*"
propagation
="REQUIRED"
/>
</
tx:attributes
>
</
tx:advice
>
<
aop:config
>
<
aop:pointcut
id
="interceptorPointCuts"
expression
="execution(* com.bluesky.spring.dao.*.*(..))"
/>
<
aop:advisor
advice-ref
="txAdvice"
pointcut-ref
="interceptorPointCuts"
/>
</
aop:config
>
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
</ beans >
第五种方式:全注解
<?
xml version="1.0" encoding="UTF-8"
?>
< beans xmlns ="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx"
xsi:schemaLocation
="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>
<
context:annotation-config
/>
<
context:component-scan
base-package
="com.bluesky"
/>
<
tx:annotation-driven
transaction-manager
="transactionManager"
/>
<
bean
id
="sessionFactory"
class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<
property
name
="configLocation"
value
="classpath:hibernate.cfg.xml"
/>
<
property
name
="configurationClass"
value
="org.hibernate.cfg.AnnotationConfiguration"
/>
</
bean
>
<!--
定义事务管理器(声明式的事务)
-->
<
bean
id
="transactionManager"
class
="org.springframework.orm.hibernate3.HibernateTransactionMana ger"
>
<
property
name
="sessionFactory"
ref
="sessionFactory"
/>
</
bean
>
</ beans >
< beans xmlns ="http://www.springframework.org/schema/beans"
</ beans >
此时在DAO上需加上@Transactional注解,如下:
package
com.bluesky.spring.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
import com.bluesky.spring.domain.User;
@Transactional
@Component( " userDao " )
public
class
UserDaoImpl
extends
HibernateDaoSupport
implements
UserDao {
public
List
<
User
>
listUsers() {
return
this
.getSession().createQuery(
"
from User
"
).list();
}
}
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
import com.bluesky.spring.domain.User;
@Transactional
@Component( " userDao " )
public
}