有办法简化spring中的事务管理配置吗

java代码: 

<bean id="proxyService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref local="myTransactionManager"/></property>
        <property name="target">
                <ref local="itemService"/>
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="add*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>
    <bean id="itemService" class="com.xxx.services.IServiceImpl">
        <property name="itemMasterDAO"><ref local="itemMasterDAO"/></property>
    </bean>


系统中有多个service,但我们的事务策略大部分都是一样的,难道非要每个service都要写一个这样的代理配置么?多个service用同样的事务策略有办法简化这样的配置么?[/code]








xml代码: 


<!-- Transactional proxy for the services -->
    <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributes">
            <props>
                                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean id="itemService" parent="baseTxProxy">
        <property name="target">
            <bean class="ItemServiceImpl" autowire="byName"/>
        </property>
    </bean>







Readonly 写道:
xml代码: 


<!-- Transactional proxy for the services -->
    <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributes">
            <props>
                                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>

    <bean id="itemService" parent="baseTxProxy">
        <property name="target">
            <bean class="ItemServiceImpl" autowire="byName"/>
        </property>
    </bean>


这样的话baseTxProxy也可能被实例化。是不是加上abstract="true"属性,把baseTxProxy只是当作一个模板比较好?因为只需要itemservice这个bean。





java代码: 

<bean id="TransactionProxyFactoryBean" lazy-init="true"
                class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
                <property name="transactionManager">
                        <ref bean="transactionManager" />
                </property>
                <property name="transactionAttributes">
                        <props>
                                <prop key="do*">PROPAGATION_REQUIRED</prop>
                                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                        </props>
                </property>
        </bean>

<bean id="ForumService" parent="TransactionProxyFactoryBean">
           <property name="target">
            <bean class="com.bbs.service.imp.ForumServiceImp">
                <property name="forumDAO">
                        <ref local="ForumDAO" />
                </property>
        </bean>
        </property>
</bean>



这样也是可以的!










posted on 2004-12-19 22:38  笨笨  阅读(1101)  评论(0编辑  收藏  举报

导航