開始是爲了實現一個全局的攔截器DefaultHandlerInterceptor,繼承HandlerInterceptorAdapter類
並把這個類注入到Spring的DefaultAnnotationHandlerMapping的interceptors中
配置如:
<!-- 處理在類級別上的@RequestMapping註解 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<list>
<!-- 多個攔截器,順序執行 -->
<ref bean="SpringMVCInterceptor" />
<ref bean="OpenSessionInViewInterceptor"/>
</list>
</property>
</bean>
<!-- 處理方法級別上的@RequestMapping註解 -->
<bean id="annotationMethodHandlerAdapter"
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
<value>text/plain;charset=utf-8</value>
</list>
</property>
</bean>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverterv2">
<property name="objectMapper">
<bean class="net.pm.misc.Hibernate4AwareObjectMapper" />
</property>
</bean>
</list>
</property>
</bean>
<!-- 表示使用cglib,而非JDK的動態代理,因爲Controller沒有實現接口,所以要配置這裏 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
可是在DefaultHandlerInterceptor攔截器中,老是不進斷點.
原因:
配置了<mvc:annotation-driven/>
這個配置聲明
{沒有 defaultAnnotationHandlerMapping這個屬性,
對於@ResultMapping標籤的解析,用 “org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping” 這個類來處理.}
所以要去掉<mvc:annotation-driven />,去掉其默認配置,
否則會實例化兩個DefaultAnnotationHandlerMapping,並且不使用你配置的那個 DefaultAnnotationHandlerMapping.
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter與<mvc:annotation-driven />關係與上同理.