|
@@ -0,0 +1,57 @@
|
|
|
+
|
|
|
+Spring MVC 涉及众多的注解和配置,很难完全记住,最好的办法就是熟悉其中运行流程,将注解和相关配置串联起来,这样掌握的牢固。
|
|
|
+
|
|
|
+## <Context:annotation-config /> 和 <context:component-scan >
|
|
|
+
|
|
|
+参考:[Spring开启Annotation<context:annotation-config>和<context:component-scan>诠释及区别](https://www.cnblogs.com/leiOOlei/p/3713989.html)
|
|
|
+
|
|
|
+
|
|
|
+要想以下这些注解在Spring Bean中生效,就必须在Spring容器中注册相应的BeanPostProcessor
|
|
|
+
|
|
|
+```java
|
|
|
+@Autowired
|
|
|
+org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
|
|
|
+
|
|
|
+@Resource、@PostConstruct、@PreDestory
|
|
|
+org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor
|
|
|
+
|
|
|
+@PersistenceContext
|
|
|
+org.springframework.beans.factory.annotation.PersistenceAnnotationBeanPostProcessor
|
|
|
+
|
|
|
+@Required
|
|
|
+org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
|
|
|
+
|
|
|
+```
|
|
|
+每个注解,都有对应的解析器类。早期这些BeanPostProcessor一个一个的注册太麻烦,于是出现了 <context:annotation-config /> 简化配置
|
|
|
+
|
|
|
+<context:annotation-config /> 用于激活那些已经在spring容器里注册过的bean里面的注解,其本质就是向Spring注册以下 BeanPostProcessor
|
|
|
+```xml
|
|
|
+<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
|
|
|
+<bean class="org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor"/>
|
|
|
+<bean class="org.springframework.beans.factory.annotation.PersistenceAnnotationBeanPostProcessor"/>
|
|
|
+<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+**注:如果配置了<context:component-scan>那么<context:annotation-config/>标签就可以不用在xml中再配置了,因为前者包含了后者。另外<context:component-scan>还提供了两个子标签 <context:include-filter>和 <context:exclude-filter> **
|
|
|
+
|
|
|
+参考:[springMVC之配置context:component-scan详解](https://blog.csdn.net/huawen6/article/details/89329629)
|
|
|
+
|
|
|
+
|
|
|
+## HandlerMapping 和 HandlerAdapter
|
|
|
+
|
|
|
+参考:
|
|
|
+* [详解SpringMVC-RequestMappingHandlerMapping](https://blog.csdn.net/m0_71777195/article/details/129224900)
|
|
|
+* [SpringMVC中HandlerMapping和HandlerAdapter详解(适配器模式)](https://blog.csdn.net/zxd1435513775/article/details/103000992)
|
|
|
+* [SpringMVC工作原理之处理映射-HandlerMapping](https://www.jianshu.com/p/f04816ee2495)
|
|
|
+
|
|
|
+HandlerMapping是一个接口,只提供了一个方法 getHandler,根据Http请求获取Handler链。
|
|
|
+如果在 spring-servlet.xml 中配置了 <mvc:annotation-driven /> ,那么在 DispatchServlet 初始化时,即初始化Spring Web容器时,会自动注册 RequestMappingHandlerMapping、BeanNameHandlerMapping、SimpleUrlHandlerMapping 这三个处理器映射器。注册过程在 DispatcherServlet#initHandlerMappings 方法中。
|
|
|
+
|
|
|
+其中<mvc:annotation-driven />同时也会自动注册 HandlerAdapter,适配不同类型的Handler。在HandlerAdaptor中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串。
|
|
|
+
|
|
|
+## 注解ControllerAdvice
|
|
|
+
|
|
|
+参考:
|
|
|
+* [Spring的@ControllerAdvice注解作用原理探究](https://zhuanlan.zhihu.com/p/73087879)
|
|
|
+
|