Spring Boot实战:从0开始动手搭建企业级项目
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.3 ViewResolver视图解析器的自动配置

Spring MVC中的Controller控制器可以返回各种各样的视图,比如JSP、JSON、Velocity、FreeMarker、Thymeleaf、HTML字符流等。这些视图的解析就涉及各种视图(即View)对应的各种视图解析器(即ViewResolver)。视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。

Spring MVC提供了不同的方式在Spring Web上下文中配置一种或多种解析策略,并可以指定它们之间的先后顺序,每一种映射策略对应一个具体的视图解析器实现类。开发人员可以设置一个视图解析器或混用多个视图解析器并指定解析器的优先顺序。Spring MVC会按视图解析器的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出异常。

在WebMvcAutoConfigurationAdapter内部类中,在前置条件满足的情况下自动配置类会向IOC容器中注册三个视图解析器,分别是InternalResourceViewResolver、BeanNameViewResolver和ContentNegotiatingViewResolver。

源码和注释如下所示:

BeanNameViewResolver:在控制器中,一个方法的返回值的字符串会根据BeanNameViewResolver查找Bean的名称并为返回字符串的View渲染视图。

InternalResourceViewResolver:常用的ViewResolver,主要通过设置在前缀、后缀和控制器中的方法来返回视图名的字符串,从而得到实际视图内容。

ContentNegotiatingViewResolver:特殊的视图解析器,它并不会自己处理各种视图,而是委派给其他不同的ViewResolver来处理不同的View,级别最高。

在普通的Web项目中,开发人员需要自己手动配置视图解析器,配置代码如下所示:

与之相对比,Spring Boot的自动配置机制则会直接在项目启动过程中将视图解析器注册到IOC容器中,而不需要开发人员再做多余的配置。当然,如果不想使用默认的配置策略,也可以自行添加视图解析器到IOC容器中。