Spring interceptor是按List的顺序来执行的。如果某一个 interceptor直接return而不去调用invocation.proceed()获得返回值的话,接下来的interceptor也不会要执行。
例如代码表的查询和缓存,应该先执行查找cache,然后再判断是否启动事务进行查询数据库。那么就应该是这样的顺序:
<bean id="labelValueCodeDAOCache" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target">
<ref bean="labelValueCodeDAO" />
</property>
<property name="interceptorNames">
<list>
<value>codeMethodCachePointCut</value><!-- 查找缓存 -->
<value>readOnlyTransactionInterceptor</value><!-- 启动事务 -->
</list>
</property>
</bean>