开始是为了实现一个全局的拦截器DefaultHandlerInterceptor,继承HandlerInterceptorAdapter类
并把这个类注入到Spring的DefaultAnnotationHandlerMapping的interceptors中
配置如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<!-- 处理在类级别上的@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 />关系与上同理.