【原创】 springMVC2使用--<mvc:annotation-driven />、DefaultAnnotationHandlerMapping不被启动
栏目:Java  作者:  阅读:(4875)

spring使用--<mvc:annotation-driven />




    <mvc:annotation-driven/>相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。


    有些时候我们需要在xml中配置拦截器,在springMVC2的时候我们会选用这四种方式:“org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping”、

org.springframework.web.servlet.handler.SimpleUrlHandlerMapping”、

org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping”、

org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping”来进行配置。(此方法只针对springMVC3低版本、springMVC2全版本,springMVC高版本提供了更好的选择)


    当我们使用“DefaultAnnotationHandlerMapping”的时候,会发现一个坑,那就是拦截器并没有能够被启动。因为<mvc:annotation-driven/>先被实例化了。

    

    那么如何解决这个问题呢?那就是取消<mvc:annotation-driven/>方式配置。转而采用分别配置AnnotationMethodHandlerAdapter跟DefaultAnnotationHandlerMapping来达到相同的目的:


	<!-- 完成请求和注解POJO的映射 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" >
		 <property name="interceptors">   
           <list> 
            
           
           <ref bean="_DotnetTicketContextInterceptor"/>
           <ref bean="_DotnetTicketRequiredInterceptor"/>
           <ref bean="hrmInterceptor"/>
           </list> 
        </property>
	</bean>


    以上方法只针对springMVC2,springMVC3提供了更好的方法来配置拦截器:


        <mvc:interceptors>    
            <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <ref bean="springSSOInterceptor"/>
            </mvc:interceptor>
            <mvc:interceptor>
                <mvc:mapping path="/**"/>
                <ref bean="springAuthorizationInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>














昵称
邮箱
域名
  通知博主
验证码

  随机文章