用BeanNameAutoProxyCreator自動創建事務代理

用BeanNameAutoProxyCreator自動創建事務代理
下面介紹一種優秀的事務代理配置策略:採用這種配置策略,完全可以避免增量式配置,所有的事務代理由系統自動創建。容器中的目標bean自動消失,避免需要使用嵌套bean來保證目標bean不可被訪問。
這種配置方式依賴於Spring提供的bean後處理器,該後處理器用於爲每個bean自動創建代理,此處的代理不僅可以是事務代理,也可以是任意的代理,只需要有合適的攔截器即可。

下面是採用BeanNameAutoProxyCreator配置事務代理的配置文件:
[xhtml] view plaincopy

<?xml version="1.0" encoding="gb2312"?>  
<!--  Spring配置文件的文件頭,包含DTD等信息-->  
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"  
    "[url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">  
<beans>  
    <!--定義數據源-->  
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <!--  定義數據庫驅動-->  
            <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>  
        <!--  定義數據庫url-->  
            <property name="url"><value>jdbc:mysql://localhost:3306/spring</value></property>  
<!--  定義數據庫用戶名-->  
            <property name="username"><value>root</value></property>  
        <!--  定義數據庫密碼-->  
            <property name="password"><value>32147</value></property>  
    </bean>  
    <!--定義一個hibernate的SessionFactory-->  
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <!--  定義SessionFactory必須注入DataSource-->  
            <property name="dataSource"><ref local="dataSource"/></property>  
            <property name="mappingResources">  
            <list>  
                <!--以下用來列出所有的PO映射文件-->  
                <value>Person.hbm.xml</value>  
            </list>  
            </property>  
            <property name="hibernateProperties">  
            <props>  
<!--此處用來定義hibernate的SessionFactory的屬性:  
不同數據庫連接,啓動時選擇create,update,create-drop-->  
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>  
            <prop key="hibernate.hbm2ddl.auto">update</prop>  
        </props>  
        </property>  
    </bean>  
    <!--  定義事務管理器,使用適用於Hibernte的事務管理器-->  
<bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
            <!--  HibernateTransactionManager  bean需要依賴注入一個SessionFactory bean的引用-->  
            <property name="sessionFactory"><ref local="sessionFactory"/></property>  
</bean>   
    <!--  配置事務攔截器-->  
<bean id="transactionInterceptor"  
class="org.springframework.transaction.interceptor.TransactionInterceptor">  
        <!--  事務攔截器bean需要依賴注入一個事務管理器 -->  
        <property name="transactionManager" ref="transactionManager"/>  
        <property name="transactionAttributes">  
            <!--  下面定義事務傳播屬性-->  
            <props>  
                <prop key="insert*">PROPAGATION_REQUIRED</prop>  
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
                <prop key="*">PROPAGATION_REQUIRED</prop>  
            </props>  
        </property>  
    </bean>  

發佈了5 篇原創文章 · 獲贊 3 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章