java - Spring MVC: Why does this <mvc:interceptors> declaration work, but not the traditional XML? -


i'm trying add handlerinterceptoradaptors of controllers/actions in spring mvc. i'm adding these servlet xml file.

what don't understand, why <mvc:interceptors> block have below working, not traditional bean declaration defaultannotationhandlermapping.

here xml working:

<mvc:interceptors>     <bean name="interceptor1" class="com.foo.bar" />     <bean name="interceptor2" class="com.foo.bar2" /> </mvc:interceptors> 



here xml can't work:

<bean name="interceptor1" class="com.foo.bar" /> <bean name="interceptor2" class="com.foo.bar2" /> <bean class="org.springframework.web.servlet.mvc.annotation.defaultannotationhandlermapping">     <property name="order" value="0" />     <property name="interceptors">         <list>             <ref bean="interceptor1"/>             <ref bean="interceptor2"/>         </list>     </property> </bean> 

i thought spring automatically pick bean of type defaultannotationhandlermapping, doesn't seem case.

note i'm annotating of controller classes @controller , methods within controller @requestmapping.

any thoughts?

spring constructing 1 "mappedinterceptor" each bean (org.springframework.web.servlet.handler.mappedinterceptor).

when want understand spring namespacehandler, find crucial @ source code (for namespacehandler , beandefinitionparser).

the mvcnamespacehandler pointed me interceptorsbeandefinitionparser ...

http://javasourcecode.org/html/open-source/spring/spring-3.0.5/org/springframework/web/servlet/config/interceptorsbeandefinitionparser.java.html

this indicates should building bean each 'interceptor', little bit this...

<bean name="interceptor1" class="com.foo.bar" /> <bean name="interceptor2" class="com.foo.bar2" /> <bean class="org.springframework.web.servlet.handler.mappedinterceptor">     <constructor-arg index="0">         <null />     </constructor-arg>     <constructor-arg index="1">         <ref bean="interceptor1"/>     </constructor-arg> </bean> <bean class="org.springframework.web.servlet.handler.mappedinterceptor">     <constructor-arg index="0">         <null />     </constructor-arg>     <constructor-arg index="1">         <ref bean="interceptor2"/>     </constructor-arg> </bean> 

this almost-definitely need tinkering, gets lot closer spring doing ...

give try, , if doesn't work first-time, harder @ source code i've linked above.

hth


Comments