知识大全 对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事务深入浅出

Spring事务深入浅出  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 spring事务配置

  <!构建HibernateTransactionManager用于获得session管理事务>  <beanid=transactionManagerclass=springfr

知识大全 在Spring中配置Hibernate的事务

在Spring中配置Hibernate的事务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文

知识大全 在Spring中配置Hibernate事务(图)

在Spring中配置Hibernate事务(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Spring中的四种声明式事务的配置

Spring中的四种声明式事务的配置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Spring

知识大全 Spring配置事务在DAO层和业务逻辑层

Spring配置事务在DAO层和业务逻辑层  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Sprin

知识大全 spring事物配置示例

  以前项目中经常用spring事务处理还没有亲自配置过惭愧现在马上上路.  首先在spring容器中配置transactionManager这个有好多实现这里以HibernateTransactio

知识大全 Spring配置数据源四种方式

Spring配置数据源四种方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用spring框

知识大全 Spring中加载XML配置文件的方式

Spring中加载XML配置文件的方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  sprin

知识大全 Spring的事务

Spring的事务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天对spring的AOP事务