知识大全 对Spring事务配置方式的深入研究
Posted 知
篇首语:鸟欲高飞先振翅,人求上进先读书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对Spring事务配置方式的深入研究相关的知识,希望对你有一定的参考价值。
对Spring事务配置方式的深入研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
前段时间对Spring的事务配置做了比较深入的研究 在此之间对Spring的事务配置虽说也配置过 但是一直没有一个清楚的认识 通过这次的学习发觉Spring的事务配置只要把思路理清 还是比较好掌握的
总结如下
Spring配置文件中关于事务配置总是由三个组成部分 分别是DataSource TransactionManager和代理机制这三部分 无论哪种配置方式 一般变化的只是代理机制这部分
DataSource TransactionManager这两部分只是会根据数据访问方式有所变化 比如使用Hibernate进行数据访问时 DataSource实际为SessionFactory TransactionManager的实现为HibernateTransactionManager
具体如下图
根据代理机制的不同 总结了五种Spring事务的配置方式 配置文件如下
第一种方式 每个Bean都有一个代理
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:context=
xmlns:aop=
xsi:schemaLocation=
beans xsd
context xsd
aop xsd >
<bean id= sessionFactory
class= springframework orm hibernate LocalSessionFactoryBean >
<property name= configLocation value= classpath:hibernate cfg xml />
<property name= configurationClass value= hibernate cfg AnnotationConfiguration />
</bean>
<! 定义事务管理器(声明式的事务) >
<bean id= transactionManager
class= springframework orm hibernate HibernateTransactionManager >
<property name= sessionFactory ref= sessionFactory />
</bean>
<! 配置DAO >
<bean id= userDaoTarget class= bluesky spring dao UserDaoImpl >
<property name= sessionFactory ref= sessionFactory />
</bean>
<bean id= userDao
class= springframework transaction interceptor TransactionProxyFactoryBean >
<! 配置事务管理器 >
<property name= transactionManager ref= transactionManager />
<property name= target ref= userDaoTarget />
<property name= proxyInterfaces value= bluesky spring dao GeneratorDao />
<! 配置事务属性 >
<property name= transactionAttributes >
<props>
<prop key= * >PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
第二种方式 所有Bean共享一个代理基类
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:context=
xmlns:aop=
xsi:schemaLocation=
beans xsd
context xsd
aop xsd >
<bean id= sessionFactory
class= springframework orm hibernate LocalSessionFactoryBean >
<property name= configLocation value= classpath:hibernate cfg xml />
<property name= configurationClass value= hibernate cfg AnnotationConfiguration />
</bean>
<! 定义事务管理器(声明式的事务) >
<bean id= transactionManager
class= springframework orm hibernate HibernateTransactionManager >
<property name= sessionFactory ref= sessionFactory />
</bean>
<bean id= transactionBase
class= springframework transaction interceptor TransactionProxyFactoryBean
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= bluesky spring dao UserDaoImpl >
<property name= sessionFactory ref= sessionFactory />
</bean>
<bean id= userDao parent= transactionBase >
<property name= target ref= userDaoTarget />
</bean>
</beans>
第三种方式 使用拦截器
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:context=
xmlns:aop=
xsi:schemaLocation=
beans xsd
context xsd
aop xsd >
<bean id= sessionFactory
class= springframework orm hibernate LocalSessionFactoryBean >
<property name= configLocation value= classpath:hibernate cfg xml />
<property name= configurationClass value= hibernate cfg AnnotationConfiguration />
</bean>
<! 定义事务管理器(声明式的事务) >
<bean id= transactionManager
class= springframework orm hibernate HibernateTransactionManager >
<property name= sessionFactory ref= sessionFactory />
</bean>
<bean id= transactionInterceptor
class= springframework transaction interceptor TransactionInterceptor >
<property name= transactionManager ref= transactionManager />
<! 配置事务属性 >
<property name= transactionAttributes >
<props>
<prop key= * >PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean class= 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= bluesky spring dao UserDaoImpl >
<property name= sessionFactory ref= sessionFactory />
</bean>
</beans>
第四种方式 使用tx标签配置的拦截器
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:context=
xmlns:aop=
xmlns:tx=
xsi:schemaLocation=
beans xsd
context xsd
aop xsd
tx xsd >
<context:annotation config />
<context:ponent scan base package= bluesky />
<bean id= sessionFactory
class= springframework orm hibernate LocalSessionFactoryBean >
<property name= configLocation value= classpath:hibernate cfg xml />
<property name= configurationClass value= hibernate cfg AnnotationConfiguration />
</bean>
<! 定义事务管理器(声明式的事务) >
<bean id= transactionManager
class= springframework orm hibernate HibernateTransactionManager >
<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(* bluesky spring dao * *()) />
<aop:advisor advice ref= txAdvice
pointcut ref= interceptorPointCuts />
</aop:config>
</beans>
第五种方式 全注解
<?xml version= encoding= UTF ?>
<beans xmlns=
xmlns:xsi= instance
xmlns:context=
xmlns:aop=
xmlns:tx=
xsi:schemaLocation=
beans xsd
context xsd
aop xsd
tx xsd >
<context:annotation config />
<context:ponent scan base package= bluesky />
<tx:annotation driven transaction manager= transactionManager />
<bean id= sessionFactory
class= springframework orm hibernate LocalSessionFactoryBean >
<property name= configLocation value= classpath:hibernate cfg xml />
<property name= configurationClass value= hibernate cfg AnnotationConfiguration />
</bean>
<! 定义事务管理器(声明式的事务) >
<bean id= transactionManager
class= springframework orm hibernate HibernateTransactionManager >
<property name= sessionFactory ref= sessionFactory />
</bean>
</beans>
此时在DAO上需加上@Transactional注解 如下
package bluesky spring dao;
import java util List;
import hibernate SessionFactory;
import springframework beans factory annotation Autowired;
import springframework orm hibernate support HibernateDaoSupport;
import springframework stereotype Component;
import bluesky spring domain User;
@Transactional
@Component( userDao )
public class UserDaoImpl extends HibernateDaoSupport implements UserDao
public List listUsers()
return this getSession() createQuery( from User ) list()
cha138/Article/program/Java/ky/201311/28876
相关参考
Spring事务深入浅出 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
<!构建HibernateTransactionManager用于获得session管理事务> <beanid=transactionManagerclass=springfr
在Spring中配置Hibernate的事务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文
在Spring中配置Hibernate事务(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Spring中的四种声明式事务的配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Spring
Spring配置事务在DAO层和业务逻辑层 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Sprin
以前项目中经常用spring事务处理还没有亲自配置过惭愧现在马上上路. 首先在spring容器中配置transactionManager这个有好多实现这里以HibernateTransactio
Spring配置数据源四种方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 使用spring框
Spring中加载XML配置文件的方式 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! sprin
Spring的事务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天对spring的AOP事务