Как заставить сервис использовать определенный txAdvice в Spring? - PullRequest
0 голосов
/ 13 мая 2011

Я пытаюсь обновить свой проект, и поэтому я пришел к транзакциям.Вот как я это делал до сих пор.

<bean id="userServiceTarget" class="com.forgin.service.UserServiceImpl">
    <property name="userDAO" ref="userDAO" />
</bean>

<bean id="userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="target" ref="userServiceTarget" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="get*">PROPAGATION_SUPPORTS</prop>
                <prop key="is*">PROPAGATION_SUPPORTS</prop>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="remove*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
</bean>

Я изменил атрибуты транзакции, как показано ниже, но я не совсем уверен, как я мог связать сервис именно с этим txAdvice.Потому что у меня, как правило, разные атрибуты транзакции для разных сервисов, поэтому, я думаю, должно быть более одного txAdvice.Есть ли способ, как сказать @Transactional, чтобы использовать этот конкретный txAdvice?

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="is*" read-only="true" />
        <tx:method name="save*" propagation="REQUIRED" />
        <tx:method name="remove*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>

1 Ответ

0 голосов
/ 13 мая 2011

Хорошо, я понял это .. это только пришло ко мне. Хаха .. Мне просто нужно предоставить дополнительные aop:advisor и aop:pointcut. Так просто.

<aop:config>
    <aop:pointcut id="userOperation"
            expression="execution(* com.forgin.service.UserServiceImpl.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
        <aop:pointcut id="differentOperation"
            expression="execution(* com.forgin.service.DifferentServiceImpl.*(..))" />
    <aop:advisor advice-ref="txAdviceDifferent" pointcut-ref="differentOperation" />
</aop:config>
...