知识大全 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> 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<User> listUsers()         return this getSession() createQuery( from User ) list();            cha138/Article/program/Java/ky/201311/28887

相关参考

知识大全 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