2011-09-21 61 views
3

我有一個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?

回答

0

一種選擇是創建一個自定義攔截器,它可以委託給一個注入攔截器的集合。

相關問題