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

Posted

篇首语:学向勤中得,萤窗万卷书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Spring中的四种声明式事务的配置相关的知识,希望对你有一定的参考价值。

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

  Spring中的四种声明式事务的配置Spring容器中有两种思想很重要 也就是我们常用的Ioc和Aop 如果理解了这两种思想 对于我们学习设计模式和编程有很大的帮助 美国四人帮(GOF)写的设计模式中 有很多都用到了Ioc的思想 简单的说就是依赖注入的思想 常见的一种情况 如果一个类中要复用另外一个类中的功能时 我们可能会首先想到继承 如果你知道Ioc这种思想的话 我想你不会用继承 你会马上想到把要用到功能抽取出来 在我们要用到的类中只需通过set方法简单的注入就可以了 其实这里用到了对象的组合代替继承 这样不仅避免了单一继承 还很好的实现了松耦合 同时也遵循了面向对象的编程的设计原则 多用组合 少用继承 在这里对于Ioc和Aop这两种思想的好处 我就不介绍了 接下来我要说的是Spring中几种常见的事务配置 是Aop和Ioc的充分体现

  在说点题外话 以前EJB在J EE中开发中可是大名鼎鼎的了 就是因为EJB提供了很多服务 而不需要我们去开发了 其中用到最多的算是它提供的声明式事务了 在Spring没有出现之前 EJB在J EE开发中扮演着非常重要的角色 同时也是很多项目失败的罪魁祸首 其中的原因就是因为它是重量级 强侵入性收费的框架 需要昂贵的服务器支持 在加上它的测试更是让人头痛 而Spring恰恰与它相反 Spring是一个轻量级的 非侵入性的开源框架 它提供的声明式事务的功能更是强大 不需要容器的支持 这一点吸引力很多人愿意放弃EJB而使用Spring 让我们言归正传吧

  以下两个bean的配置是下面要用到的     <! 定义事务管理器(声明式的事务) >     <bean id= transactionManager       class= springframework orm hibernate HibernateTransactionManager >      <property name= sessionFactory >       <ref local= sessionFactory />      </property>     </bean>    <! *******业务逻辑层(是对各个DAO层的正面封装)主要用到<<门面模式>>****** >     <bean id= fundService       class= jack fund service serviceimpl FundService >      <property name= operdao >       <ref bean= operatorDAO />      </property>      <property name= producedao >       <ref bean= fundProduceDAO />      </property>      <property name= customerdao >       <ref bean= customerDAO />      </property>      <property name= accountdao >       <ref bean= accountDAO />      </property>      <property name= fundaccountdao >       <ref bean= fundAccountDAO />      </property>      <property name= fundtransdao >       <ref bean= fundTransDAO />      </property>     </bean>    可能还有其他很多模块 <bean id= fundService />可能只是其中的模块

  第一种 配置声明式事务的方法如下 也是我们最常用的方法了 它适用于你的库表比较少的情况下     <bean id= fundServiceDAOProxy       class= springframework transaction interceptor TransactionProxyFactoryBean >      <! 配置事务管理器 >      <property name= transactionManager >       <ref bean= transactionManager />      </property>      <! 此属性指定目标类本省是否是代理的对象 如果目标类没有实现任何类 就设为true代表自己 >      <property name= proxyTargetClass >       <value>false</value>      </property>      <property name= proxyInterfaces >       <value> jack fund service IFundService</value>      </property>      <! 目标bean >      <property name= target >       <ref bean= fundService />      </property>      <! 配置事务属性 >      <property name= transactionAttributes >       <props>        <prop key= delete* >PROPAGATION_REQUIRED</prop>        <prop key= add* >PROPAGATION_REQUIRED</prop>        <prop key= update* >PROPAGATION_REQUIRED</prop>        <prop key= save* >PROPAGATION_REQUIRED</prop>        <prop   key= find* >PROPAGATION_REQUIRED readOnly</prop>       </props>      </property>     </bean>     以下可能还有其他的xxxServiceDAOProxy 大家可以看出针对每一个功能模块配置一个业务代理服务 如果模块多大话 就显得代码有点多了 发现他们只是稍微一点不一样 这时我们就应该想到继承的思想 用第二种方法 第二种 配置声明式事务的方法如下 这种情况适合相对比较多的模块时使用     <! 利用继承的思想简化配置 要把abstract= true >     <bean id= transactionBase       class= springframework transaction interceptor TransactionProxyFactoryBean       lazy init= true abstract= true >      <! 配置事务管理器 >      <property name= transactionManager >       <ref bean= transactionManager />      </property>      <! 配置事务属性 >      <property name= transactionAttributes >       <props>        <prop key= delete* >PROPAGATION_REQUIRED</prop>        <prop key= add* >PROPAGATION_REQUIRED</prop>        <prop key= update* >PROPAGATION_REQUIRED</prop>        <prop key= save* >PROPAGATION_REQUIRED</prop>        <prop key= find* >PROPAGATION_REQUIRED readOnly</prop>       </props>      </property>     </bean>    而具体的模块可以简单的这样配置 只要指明它的parent(父类)就可以了 父类一般把abstract= true 因为在容器加载的时候不需要初始化 等到用的时候再有它的子类调用的时候 再去初始化     <bean id= fundServiceDAOProxy parent= transactionBase >      <property name= target >      <ref bean= fundService />      </property>     </bean>    这样配置的话 如果有多个像fundService这样模块时 可以少些很多重复的代码

第三种 配置声明式事务的方法如下 主要利用BeanNameAutoProxyCreator自动创建事务代理      <bean id= transactionInterceptor       class= springframework transaction interceptor TransactionInterceptor >      <property name= transactionManager >       <ref bean= transactionManager />      </property>      <! 配置事务属性 >      <property name= transactionAttributes >       <props>        <prop key= delete* >PROPAGATION_REQUIRED</prop>        <prop key= add* >PROPAGATION_REQUIRED</prop>        <prop key= update* >PROPAGATION_REQUIRED</prop>        <prop key= save* >PROPAGATION_REQUIRED</prop>        <prop key= find* >PROPAGATION_REQUIRED readOnly</prop>       </props>      </property>     </bean>     <bean      class= springframework aop framework autoproxy BeanNameAutoProxyCreator >      <property name= beanNames >       <list>        <value>fundService</value>       </list>      </property>      <property name= interceptorNames >       <list>        <value>transactionInterceptor</value>       </list>      </property>     </bean>    这种方法主要利用了拦截器的原理     前三种方法一般都必需指定具体的模块bean 如果模块过多话 比如一个大型的网站一般有几十个模块 我们就得考虑用第四种的配置方式了 自动创建事务代理的方式了 cha138/Article/program/Java/ky/201311/28539

相关参考

知识大全 Spring声明式事务管理源码解读之事务开始

Spring声明式事务管理源码解读之事务开始  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在s

知识大全 spring事务配置

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

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

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

知识大全 Spring2.5访问Session属性的四种策略

Spring2.5访问Session属性的四种策略  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

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

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

知识大全 对Spring事务配置方式的深入研究

对Spring事务配置方式的深入研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前段时间对S

知识大全 Spring事务配置的五种方式

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

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

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

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

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

知识大全 spring事物配置示例

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