在前面章节讲解SpringMVC自动配置原理的时候,可以知道如果有些组件可以有多个(ViewResolver)将用户配置的和自己默认的组合起来;那么ViewResolver是什么,有什么用,下面就来对ViewResolver的解析。这里以BeanNameViewResolver的bean的实例化为例相应解析,对于源码如下所示。
BeanNameViewResolver主要通过逻辑视图名称匹配定义好的视图Bean对象。一般情况下,对应的Bean对象需要注册到Spring的上下文中,BeanNameViewResolver会返回名称匹配的视图对象。BeanNameViewResolver实例化的前提条件是容器中View实现类的Bean存在,源码如下所示。
BeanNameViewResolver的resolveViewName方法首先通过名称判断对应视图是否存在,当通过名称无法匹配时,会通过类型视图判断,如果存在对应的Bean,则获取对应的View对象并返回。
创建一个SpringBoot工程,再创建一个ThisMyView.java类并实现View接口,重写getContentType与render方法,getContentType方法用于设置字符集,render方法用于返回数据信息,对应代码如下所示。
Controller层创建一个ThisMyViewController控制请求类并在该类上使用注解@Controller,然后在类中编写testThisMyView方法返回一个视图名称,需要在该方法上加上注解@RequestMapping来定义一个请求地址,代码如下所示。
本章学习了SpringBoot是如何嵌入式Servlet容器以及任何集成原始的Filter,Listener如何自定义@ResponseBody渲染,SpringBoot中还通过引入了spring-boot-starter-web依赖,完成了DispatcherServlet的自动配置之后,便会通过WebMvcAutoConfiguration进行SpringMVC的自动配置。
1.SpringMVC的自动配置的原理是什么?
2.如何自定义原生的Filter?
3.如何使用注解的方式加载原生的ServletAPI?