zoukankan      html  css  js  c++  java
  • SPRING中事务的配置

    采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统自动创建。容器中的目标bean自动消失,避免需要使用嵌套bean来保证目标bean不可被访问。
    这 种配置方式依赖于Spring提供的bean后处理器,该后处理器用于为每个bean自动创建代理,此处的代理不仅可以是事务代理,也可以是任意的代理, 只需要有合适的拦截器即可。这些是AOP框架的概念,笔者在此处不对AOP进行深入介绍。读者只需了解这种事务代理的配置方式即可。
    下面是采用BeanNameAutoProxyCreator配置事务代理的配置文件:

    Xml代码
      1. <?xml version="1.0" encoding="gb2312"?>
      2. <!-- Spring配置文件的文件头,包含DTD等信息-->
      3. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
      4. "http://www.springframework.org/dtd/spring-beans.dtd">
      5. <beans>
      6. <!--定义数据源-->
      7. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      8. <!-- 定义数据库驱动-->
      9. <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
      10. <!-- 定义数据库url-->
      11. <property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>
      12. <!-- 定义数据库用户名-->
      13. <property name="username"><value>root</value></property>
      14. <!-- 定义数据库密码-->
      15. <property name="password"><value>32147</value></property>
      16. </bean>
      17. <!--定义一个hibernate的SessionFactory-->
      18. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      19. <!-- 定义SessionFactory必须注入DataSource-->
      20. <property name="dataSource"><ref local="dataSource"/></property>
      21. <property name="mappingResources">
      22. <list>
      23. <!--以下用来列出所有的PO映射文件-->
      24. <value>Person.hbm.xml</value>
      25. </list>
      26. </property>
      27. <property name="hibernateProperties">
      28. <props>
      29. <!--此处用来定义hibernate的SessionFactory的属性:
      30. 不同数据库连接,启动时选择create,update,create-drop-->
      31. <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
      32. <prop key="hibernate.hbm2ddl.auto">update</prop>
      33. </props>
      34. </property>
      35. </bean>
      36. <!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->
      37. <bean id="transactionManager"
      38. class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      39. <!-- HibernateTransactionManager bean需要依赖注入一个SessionFactory bean的引用-->
      40. <property name="sessionFactory"><ref local="sessionFactory"/></property>
      41. </bean>
      42. <!-- 配置事务拦截器-->
      43. <bean id="transactionInterceptor"
      44. class="org.springframework.transaction.interceptor.TransactionInterceptor">
      45. <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
      46. <property name="transactionManager" ref="transactionManager"/>
      47. <property name="transactionAttributes">
      48. <!-- 下面定义事务传播属性-->
      49. <props>
      50. <prop key="insert*">PROPAGATION_REQUIRED</prop>
      51. <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
      52. <prop key="*">PROPAGATION_REQUIRED</prop>
      53. </props>
      54. </property>
      55. </bean>
      56. <!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性
      57. 这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理
      58. <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      59. 指定对满足哪些bean name的bean自动生成业务代理 -->
      60. <property name="beanNames">
      61. <!-- 下面是所有需要自动创建事务代理的bean-->
      62. <list>
      63. <value>personDao</value>
      64. </list>
      65. <!-- 此处可增加其他需要自动创建事务代理的bean-->
      66. </property>
      67. <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
      68. <property name="interceptorNames">
      69. <list>
      70. <value>transactionInterceptor</value>
      71. <!-- 此处可增加其他新的Interceptor -->
      72. </list>
      73. </property>
      74. </bean>
      75. <!--定义DAO Bean ,由于BeanNameAutoProxyCreator自动生成事务代理-->
      76. <bean id="personDao" class="lee.PersonDaoHibernate">
      77. <property name="sessionFactory"><ref local="sessionFactory"/></property>
      78. </bean>
      79. </beans>
  • 相关阅读:
    python经典笔试、面试题-01
    python-实现简单区块链
    灰狼优化算法——MATLAB
    Linux 2.6内核Makefile浅析
    自动化专业学习路线不再迷茫
    进程、线程与处理器的调度
    关于线程与进程以及线程和进程控制块理解进程和线程的概念
    Linux下nm和ldd 命令
    bss、data和rodata区别与联系
    open与fopen的区别
  • 原文地址:https://www.cnblogs.com/123a/p/4119713.html
Copyright © 2011-2022 走看看