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>

我想确保它readOnlyConnectionMethodInterceptor仅适用于以 find* 开头的方法,而不适用于其他方法。

我在春季文档中找不到任何关于此的信息。

我想知道是否有人可以阐明如何实现这一目标。

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 回答