SpringBoot启动原理!

自动配置原理

Spring启用全自动配置功能的注解就是@EnableAutoConfiguration,应用添加了@EnableAutoConfiguration注解之后。

会读取所有jar包下面的spring.factories文件,获取文件中配置的自动装配模块,然后去装配对应的模块。

@EnableAutoConfiguration的功能可总结为:

  • 使Spring启用factories机制导入各个starter模块的配置。

启动流程

构造SpringBootApplication对象和执行run方法

核心注解@SpringBootConfiguration标识启动类为配置类。

@EnableAutoConfiguration通过内部@Import注解AutoConfigurationImportSelector.class实现自动装配。

@ComponentScan默认扫描当前目录及子目录下的Bean。

SpringBootApplication的构造方法主要做了几件事:

  • 根据是否加载servlet类判断是否是web环境。
  • 获取所有初始化器,扫描所有META-INF/spring.factories下的ApplicationContextInitializer子类。
  • 通过反射拿到实例,在spring实例启动前后做一些回调工作。
  • 获取所有监听器,也是扫描配置加载对应的类实例。

run方法主要创建了配置环境、事件监听、启动应用上下文,其中refresh方法贯穿springbean的生命周期。

执行bean的生命周期的前后置钩子方法,并且处理spring的注解标注的类。

onRefresh中通过Java代码构建出tomcat容器并启动。

img