SpringBoot静态资源配置原理(源码一步步分析,详细易懂)

您所在的位置:网站首页 springboot无法访问空白静态资源 SpringBoot静态资源配置原理(源码一步步分析,详细易懂)

SpringBoot静态资源配置原理(源码一步步分析,详细易懂)

2024-07-08 09:58| 来源: 网络整理| 查看: 265

前言: 我们都知道,SpringBoot启动会默认加载很多xxxAutoConfiguration类(自动配置类) 其中SpringMVC的大都数功能都集中在WebMvcAutoConfiguration类中,根据条件ConditionalOnxxx注册类对象;WebMvcAutoConfiguration满足以下ConditionalOnxxx条件,类是生效的,并把其对象注册到容器中。

在这里插入图片描述

那WebMvcAutoConfiguration生效给容器中配置了什么呢?

文章目录 WebMvcAutoConfigurationAdapter静态内部类一.配置文件前缀二.只有一个有参构造器三.源码分析addResourceHandlers方法1.禁用掉静态资源的路径映射2.源码分析webjars的底层规则3.源码分析默认静态资源路径的底层规则

WebMvcAutoConfigurationAdapter静态内部类 一.配置文件前缀

我们来看WebMvcAutoConfiguration类中的WebMvcAutoConfigurationAdapter静态内部类: 在这里插入图片描述 这是一个配置类,配置文件的属性和xxx进行了绑定。 再看@EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class, WebProperties.class}) 我们来看当中的WebMvcProperties、ResourceProperties和WebProperties的字节码文件 分别点进这三个类的字节码文件中: 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

可以看到WebMvcProperties它是与配置文件前缀spring.mvc相关联的。 ResourceProperties它是与配置文件前缀spring.resources相关联。 WebProperties它是与配置文件前缀spring.web相关联。

二.只有一个有参构造器

WebMvcAutoConfigurationAdapter静态内部配置类只有一个有参数的构造器,那它会带来什么特性呢? 它的有参构造器中所有参数的值都会从容器中确定

public WebMvcAutoConfigurationAdapter(ResourceProperties resourceProperties, WebProperties webProperties, WebMvcProperties mvcProperties, ListableBeanFactory beanFactory, ObjectProvider messageConvertersProvider, ObjectProvider resourceHandlerRegistrationCustomizerProvider, ObjectProvider dispatcherServletPath, ObjectProvider servletRegistrations) { this.resourceProperties = (Resources)(resourceProperties.hasBeenCustomized() ? resourceProperties : webProperties.getResources()); this.mvcProperties = mvcProperties; this.beanFactory = beanFactory; this.messageConvertersProvider = messageConvertersProvider; this.resourceHandlerRegistrationCustomizer = (WebMvcAutoConfiguration.ResourceHandlerRegistrationCustomizer)resourceHandlerRegistrationCustomizerProvider.getIfAvailable(); this.dispatcherServletPath = dispatcherServletPath; this.servletRegistrations = servletRegistrations; this.mvcProperties.checkConfiguration(); }

我们来看下它的参数:

第一个参数是ResourceProperties resourceProperties 就是我们上面提到的@EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class, WebProperties.class})中注册开启的第二个类,获取和spring.resources绑定的所有的值的对象第二个参数是WebProperties webProperties 就是我们上面提到的@EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class, WebProperties.class})中注册开启的第三个类,获取和spring.web绑定的所有的值的对象第三个参数是WebMvcProperties mvcProperties 就是我们上面提到的@EnableConfigurationProperties({WebMvcProperties.class, ResourceProperties.class, WebProperties.class})中注册开启的第一个类,获取和spring.mvc绑定的所有的值的对象第四个参数是ListableBeanFactory beanFactory ,这个是Spring的beanFactory,也就是我们的容器。第五个参数是ObjectProvider messageConvertersProvider,找到所有的HttpMessageConverters第六个参数是ObjectProvider resourceHandlerRegistrationCustomizerProvider,找到资源处理器的自定义器第七个参数是ObjectProvider dispatcherServletPath,相当与找dispatcherServlet能处理的路径第八个参数是ObjectProvider


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3