SPRING中事務的配置

採用這種配置策略,徹底能夠避免增量式配置,全部的事務代理由系統自動建立。容器中的目標bean自動消失,避免須要使用嵌套bean來保證目標bean不可被訪問。
這 種配置方式依賴於Spring提供的bean後處理器,該後處理器用於爲每一個bean自動建立代理,此處的代理不只能夠是事務代理,也能夠是任意的代理, 只須要有合適的攔截器便可。這些是AOP框架的概念,筆者在此處不對AOP進行深刻介紹。讀者只需瞭解這種事務代理的配置方式便可。
下面是採用BeanNameAutoProxyCreator配置事務代理的配置文件:mysql

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>
相關文章
相關標籤/搜索