自动装配

SpringBoot所有自动配置都是在启动的时候扫描并加载:所有的自动配置类都在spring.factories,但是不一定生效(需要判断条件是否成立,pom.xml文件中导入了对应的start,就有对应的启动器了,自动装配就会生效,即配置成功)。自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。

  1. SpringBoot在启动的时候,从类路径下/META-INF/spring.factories获取EnableAutoConfiguration指定的值
  2. 将这些值作为自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置(以前我们需要手动配置的东西,现在SpringBoot帮我们做了)
  3. 整合JavaEE的解决方案和自动配置的东西都在spring-boot-autoconfigure-2.5.3.jar这个包下,它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
  4. 容器中就会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置(@Configuration , JavaConfig)
  5. 有了自动配置类,免去了我们手动编写配置文件的工作(给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可)xxxAutoConfigurartion:自动配置类,给容器中添加组件 xxxProperties:封装配置文件中相关属性

SpringApplication.run分析

分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行。SpringApplication类主要做了以下四件事情:

  1. 推断应用的类型是普通的项目还是Web项目
  2. 查找并加载所有可用初始化器 ,设置到initializers属性中
  3. 找出所有的应用程序监听器,设置到listeners属性中
  4. 推断并设置main方法的定义类,找到运行的主类

静态资源的导入

  • webjars  localhost:8080/webjars/
  • resources,static(默认),public (前三者优先级由高到低),/**  localhost:8080/

SpringBoot2.5.3中WebProperties.java关于静态资源的路径配置:

springboot gateway版本 springboot稳定版本_配置文件

扩展SpringMVC

springboot gateway版本 springboot稳定版本_spring_02

@EnableWebMvc下的DelegatingWebMvcConfiguration类继承了WebMvcConfigurationSupport:

springboot gateway版本 springboot稳定版本_spring_03

WebMvcAutoConfiguration类则注明有WebMvcConfigurationSupport类会失效:

springboot gateway版本 springboot稳定版本_jar_04

 因此SpringBoot扩展SpringMVC不能加@EnableWebMvc注解!