自动装配
SpringBoot所有自动配置都是在启动的时候扫描并加载:所有的自动配置类都在spring.factories,但是不一定生效(需要判断条件是否成立,pom.xml文件中导入了对应的start,就有对应的启动器了,自动装配就会生效,即配置成功)。自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。
- SpringBoot在启动的时候,从类路径下/META-INF/spring.factories获取EnableAutoConfiguration指定的值
- 将这些值作为自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置(以前我们需要手动配置的东西,现在SpringBoot帮我们做了)
- 整合JavaEE的解决方案和自动配置的东西都在spring-boot-autoconfigure-2.5.3.jar这个包下,它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器
- 容器中就会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并自动配置(@Configuration , JavaConfig)
- 有了自动配置类,免去了我们手动编写配置文件的工作(给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可)xxxAutoConfigurartion:自动配置类,给容器中添加组件 xxxProperties:封装配置文件中相关属性
SpringApplication.run分析
分析该方法主要分两部分,一部分是SpringApplication的实例化,二是run方法的执行。SpringApplication类主要做了以下四件事情:
- 推断应用的类型是普通的项目还是Web项目
- 查找并加载所有可用初始化器 ,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listeners属性中
- 推断并设置main方法的定义类,找到运行的主类
静态资源的导入
- webjars localhost:8080/webjars/
- resources,static(默认),public (前三者优先级由高到低),/** localhost:8080/
SpringBoot2.5.3中WebProperties.java关于静态资源的路径配置:
扩展SpringMVC
@EnableWebMvc下的DelegatingWebMvcConfiguration类继承了WebMvcConfigurationSupport:
WebMvcAutoConfiguration类则注明有WebMvcConfigurationSupport类会失效:
因此SpringBoot扩展SpringMVC不能加@EnableWebMvc注解!