0

私は以下のように定義された春のトランザクションを持っています-

<bean id="ServiceTransactions"  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
        <property name="optimize" value="true" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="transactionAttributes">
        <props>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="create*">PROPAGATION_REQUIRED</prop>
            <prop key="update*">PROPAGATION_REQUIRED</prop>
            <prop key="delete*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
            <property name="preInterceptors">
        <list>
            <bean id="readOnlyConnectionMethodInterceptor" class="com.dealer.framework.dao.interceptor.ReadOnlyConnectionMethodInterceptor" />
        </list>
    </property>
    </bean>

readOnlyConnectionMethodInterceptorfind *で始まるメソッドにのみ適用され、他のメソッドには適用されないことを確認したいと思います。

これに関する春のドキュメントで情報を見つけることができませんでした。

誰かがこれを達成する方法に光を当てることができるかどうか疑問に思っています。

4

1 に答える 1

0

これについては、Spring側ではサポートされていないようです。アクションを実行する前に、プリインターセプターでメソッド名をチェックするハックな方法を作成しました。

ややこのように-

class CustomInterceptor {

    public Object invoke(MethodInvocation invocation) throws Throwable {

      if(invocation.getMethod().getName().startsWith("foo"){
          //Take appropriate Action
      }
      invocation.proceed();
    }
}
于 2013-03-15T19:04:06.247 に答える