SpringMvc业务流程.md 3.3 KB

Spring MVC 涉及众多的注解和配置,很难完全记住,最好的办法就是熟悉其中运行流程,将注解和相关配置串联起来,这样掌握的牢固。

参考:

参考:Spring开启Annotationcontext:annotation-config和context:component-scan诠释及区别

要想以下这些注解在Spring Bean中生效,就必须在Spring容器中注册相应的BeanPostProcessor

@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一个一个的注册太麻烦,于是出现了 简化配置

用于激活那些已经在spring容器里注册过的bean里面的注解,其本质就是向Spring注册以下 BeanPostProcessor

<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详解

HandlerMapping 和 HandlerAdapter

参考:

HandlerMapping是一个接口,只提供了一个方法 getHandler,根据Http请求获取Handler链。 如果在 spring-servlet.xml 中配置了 ,那么在 DispatchServlet 初始化时,即初始化Spring Web容器时,会自动注册 RequestMappingHandlerMapping、BeanNameHandlerMapping、SimpleUrlHandlerMapping 这三个处理器映射器。注册过程在 DispatcherServlet#initHandlerMappings 方法中。

其中同时也会自动注册 HandlerAdapter,适配不同类型的Handler。在HandlerAdaptor中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的Java对象转换为Json格式的字符串。

注解ControllerAdvice

参考: