这里假定我们已经有了一些现成的类和接口,比如说

1. 一个现成的User POJO对象

2. 一个UserDao接口和UserDaoHibernateImpl实现类

3. 一个UserService接口和UserServiceImpl实现类

具体配置方法如下:

1. 使用spring的BeanNameAutoProxyCreator和TransactionInterceptor配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" default-lazy-init="true"> <bean id="userService" class="test.service.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="test.dao.UserDaoHibernateImpl"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>userService</value> </list> </property> <property name="interceptorNames"> <list> <value>myTransactionInterceptor</value> </list> </property> </bean> <bean id="myTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="myTransactionManager" /> </property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="mappingResources"> <list> <value>test/user.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value> </property> </bean> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:res:hsqldb/testdb"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> </beans>

2. 使用spring常用的proxy配法,这里使用了对abstract bean的定义

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" default-lazy-init="true"> <bean id="userService" parent="myProxyTemplate"> <property name="target" ref="userServiceTarget"/> <property name="proxyInterfaces" value="test.service.UserService"/> </bean> <bean id="userServiceTarget" class="test.service.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="test.dao.UserDaoHibernateImpl"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean id="myProxyTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="myTransactionManager" /> </property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="mappingResources"> <list> <value>test/user.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value> </property> </bean> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:res:hsqldb/testdb"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> </beans>

3. 使用spring提供的tx命名空间和aop配置

<?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: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.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd" default-lazy-init="true"> <bean id="userService" class="test.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="test.UserDaoHibernateImpl"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <tx:advice id="txAdvice" transaction-manager="myTransactionManager"> <tx:attributes> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="list*" propagation="SUPPORTS" read-only="true"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="userServiceOperation" expression="execution(* *..test.UserService.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="userServiceOperation"/> </aop:config> <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="mySessionFactory"/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="mappingResources"> <list> <value>test/user.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value>hibernate.dialect=org.hibernate.dialect.HSQLDialect</value> </property> </bean> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:res:hsqldb/testdb"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> </beans>

转载于:https://www.cnblogs.com/wdpp/archive/2010/08/30/2386309.html

Spring中事务管理的几种配法相关推荐

  1. spring中事务配置的3种方式-2

    http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch09s05.html http://zpchen.iteye.com/blog/ ...

  2. spring中事务失效的几种情况

    下面简单介绍下,spring中常见的事务失效的几种情况.让我们在开发的过程避免这些情况,写出正确而且优雅的代码. 文章目录 数据库引擎不支持,mysql需要InnoDB 方法必须是public的 方法 ...

  3. spring支持事务管理的两种方式

    转载:https://blog.csdn.net/bao19901210/article/details/41724355 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一 ...

  4. spring中事务配置的3种方式

    http://xuxiaolei.iteye.com/blog/417803 (1)通过TransactionProxyFactoryBean来声明 Xml代码   <?xml version= ...

  5. Spring中进行事务管理的两种方式

    1.Spring中事务管理的API 事务是指逻辑上要么全部成功.要么全部失败的一组操作.例如用户A给用户B转账,则用户A账户余额减少.用户B账户增加这两个操作就是一组事务,必须全部成功或失败撤回操作, ...

  6. 《Java EE企业级应用开发教程(SSM)》练习题答案---第五章Spring的事务管理(仅供参考)

    单选题 1.以下有关事务管理方式相关说法错误的是(). A.Spring中的事务管理分为两种方式:一种是传统的编程式事务管理,另一种是声明式事务管理 B.编程式事务管理:是通过AOP技术实现的事务管理 ...

  7. spring教程--事务管理

    Spring的事务管理 1.1 事务: 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性: ACID: 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致. 隔离性:一个事 ...

  8. 初见Spring之事务管理

    初见Spring之事务管理 在很多业务的场景下,需要对数据库进行操作,在对访问数据库的时候,尤其是对数据的内容进行增删改操作时,引入事务就是必要的了.在通常情况下利用Java自带的JDBC操作完成事务 ...

  9. spring 的4种事务管理(1种编程式+3种声明式)

    见:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Sprin ...

  10. Spring的4种事务管理(1种编程式事务+三种声明事务)

    2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...

最新文章

  1. 快过高铁!构建云分布式应用还能这样操作?!
  2. jquery easy ui 简单字段选择搜索实现
  3. MDNS的漏洞报告——mdns的最大问题是允许广域网的mdns单播查询,这会暴露设备信息,或者被利用用于dns放大攻击...
  4. 34. Search for a Range
  5. 服务器主板开机无显维修,电脑主板开机无显示的维修方法-1
  6. leetcode 223. Rectangle Area | 223. 矩形面积(Java)
  7. ORA-01172,ORA-01151
  8. nfs挂载在centos6后注意
  9. Java List接口概述
  10. linux与unix的区别_Linux与Unix
  11. 其他 - 所有中文字 附 拼音
  12. 【半佛仙人】他从不买水军,凭什么一年内做到B站500万粉丝?
  13. python 刷 阅读量
  14. 图解CAN与CANopen协议,小白都能一目了然
  15. 硬币翻转倍数递增试算
  16. python魔术方法(一)
  17. 原定7月30日上线的《暗黑破坏神:不朽》又又又”跳票“了,突发上线,如何在电脑上畅玩?
  18. VOT2018 SiamNet VS DCF
  19. AI目标分割能力,无需绿幕即可实现快速视频抠图
  20. 解决Failed to connect to github.com port 443: Timed out

热门文章

  1. 【SCIR AAAI2021】数据增强没效果?试试用Cluster-to-Cluster生成更多样化的新数据吧...
  2. nlp-paper: 按主题分类的自然语言处理文献大列表
  3. 概率论从入门到放弃?布朗学霸火到宕机的毕业作品,让统计“看得见”
  4. 一位算法工程师从30+场秋招面试中总结出的超强面经—文本检测与GAN篇(含答案)...
  5. 数据结构 /ord ;集合;dict()
  6. 带你动手编程的强化学习著作,每行代码都是它的温柔!
  7. 用AlphaGo背后的人工智能做金融投资
  8. 每周荐书:云原生、Docker、Web算法(评论送书)
  9. EventThread线程对VSync的分发
  10. 21世纪IT人才需要具有的5个鲜明特点