我有一个 Spring 2.5.x 应用程序,我正在迁移到 Spring 3 并且遇到了一个小问题。
我有一个像这样的处理程序映射:
<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
带有 a 的注释<context:component-scan>
(基本上注册 a DefaultAnnotationHandlerMapping
)。
在 Spring 3 中,我看到了<mvc:interceptors>
可用于将拦截器添加到某些 URL 的标记,但您只能指定一个拦截器,至少这是我从 schema中看到的。
据我所知,我必须为每个拦截器注册其中一个,这将复制我所有的 URL 的次数与我拥有的拦截器一样多(我什至不知道它们将以什么顺序运行)。
另一方面,我不能在上添加迭代器,DefaultAnnotationHandlerMapping
因为它们将为我所有带有注释的控制器运行,@RequestMapping
而我不希望这样。
那么如何为某些 URL 指定拦截器是 Spring 3,而不重复 URL 并根据@RequestMapping
注释保持 URL 到控制器的映射?