您的位置:首页 > 编程语言 > Java开发

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

2004-12-19 22:38 477 查看
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>

这样也是可以的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: