我有一个Spring 2.5.x应用程序,我正在迁移到Spring 3并碰到一个小问题。春天3 <mvc:拦截器>有缺陷?
我有一个像处理程序映射,以便:
<bean id="handlerMappings1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="interceptor1" />
<ref bean="interceptor2" />
....
<ref bean="interceptorN" />
</list>
</property>
<property name="urlMap">
<map>
<entry key="/url1.html" value-ref="controller1" />
<entry key="/url2.html" value-ref="controller2" />
....
<entry key="/url100.html" value-ref="controller100" />
</map>
</property>
</bean>
,另一个这样的:
<bean id="handlerMappings2" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/urlA.html" value-ref="controllerA" />
<entry key="/urlB.html" value-ref="controllerB" />
....
<entry key="/urlN.html" value-ref="controllerN" />
</map>
</property>
</bean>
我慢慢都与@RequestMapping
注解用<context:component-scan>
(其基本上注册一个DefaultAnnotationHandlerMapping
替换)。
在Spring 3中,我看到了<mvc:interceptors>
标记,它可以用来为某些URL添加拦截器,但是您只能指定一个拦截器,至少这就是我看到的from the schema。
从我所能得出的结果来看,我必须为每个拦截器注册其中的一个,它将复制我所有URL的次数,因为我有拦截器(我甚至不知道它们以什么顺序运行)。
另一方面,我不能在DefaultAnnotationHandlerMapping
上添加iterceptors,因为它们将为所有我的控制器运行,并注释@RequestMapping
,我不想那样做。
那么我怎样才能指定拦截器是Spring 3的一些URL,而不重复的URL和 保持基于@RequestMapping
注释的控制器映射的URL?