Spring Boot & Web 整合
Spring Boot与Spring MVC天然整合只需要导入starter-web即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
1. Spring Boot的静态资源访问
回忆一下Spring MVC的静态资源访问是类似配置:
<mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/" />
<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/" />
但是Spring Boot已经是不用配置文件了,现在就分析一下Spring Boot是如何访问静态资源的。由Spring Boot的自动配置原理可知,WebMvcAutoConfiguration 是WebMvc的配类。
1.1 处理器适配器&处理器映射器
WebMvcAutoConfiguration静态内部类:EnableWebMvcConfiguration 注意他的注释描述Configuration equivalent to {@code @EnableWebMvc}。
/**
* Configuration equivalent to {@code @EnableWebMvc}.
*/
@Configuration
public static class EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration {
// ...
// 注册注解版处理器适配器配置
@Bean
@Override
public RequestMappingHandlerAdapter requestMappingHandlerAdapter() {
RequestMappingHandlerAdapter adapter = super.requestMappingHandlerAdapter();
adapter.setIgnoreDefaultModelOnRedirect(this.mvcProperties == null ? true
: this.mvcProperties.isIgnoreDefaultModelOnRedirect());
return adapter;
}
// ...
// 注册注解版处理器映射器
@Bean
@Primary
@Override
public RequestMappingHandlerMapping requestMappingHandlerMapping() {
// Must be @Primary for MvcUriComponentsBuilder to work
return super.requestMappingHandlerMapping();
}
// ...
1.2 静态资源访问
WebMvcAutoConfiguration静态内部类WebMvcAutoConfigurationAdapter实现WebMvcConfigurerAdapter的addResourceHandlers方法
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Integer cachePeriod = this.resourceProperties.getCachePeriod();
// 支持webjars访问
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(
registry.addResourceHandler("/webjars/**")
.addResourceLocations(
&