SpringBoot静态资源配置原理(源码一步步分析,详细易懂) |
您所在的位置:网站首页 › springboot无法访问空白静态资源 › SpringBoot静态资源配置原理(源码一步步分析,详细易懂) |
前言: 我们都知道,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 |