一、启动原理
• SpringApplication.run(主程序类)
– new SpringApplication(主程序类)
• 判断是否web应用
• 加载并保存所有ApplicationContextInitializer(META-INF/spring.factories),
• 加载并保存所有ApplicationListener
• 获取到主程序类
– run()
• 回调所有的SpringApplicationRunListener(META-INF/spring.factories)的starting
• 获取ApplicationArguments
• 准备环境&回调所有监听器( SpringApplicationRunListener )的environmentPrepared
• 打印banner信息
• 创建ioc容器对象
– AnnotationConfigEmbeddedWebApplicationContext(web环境容器)
– AnnotationConfigApplicationContext(普通环境容器)
• 准备环境
– 执行ApplicationContextInitializer. initialize()
– 监听器SpringApplicationRunListener回调contextPrepared
– 加载主配置类定义信息
– 监听器SpringApplicationRunListener回调contextLoaded
• 刷新启动IOC容器;
– 扫描加载所有容器中的组件
– 包括从META-INF/spring.factories中获取的所有EnableAutoConfiguration组件
• 回调容器中所有的ApplicationRunner、CommandLineRunner的run方法
• 监听器SpringApplicationRunListener回调finished
二、自动配置
• Spring Boot启动扫描所有jar包的META-INF/spring.factories中配置的 EnableAutoConfiguration组件
• spring-boot-autoconfigure.jar\META-INF\spring.factories有启动时需要加载的 EnableAutoConfiguration组件配置
• 配置文件中使用debug=true可以观看到当前启用的自动配置的信息
• 自动配置会为容器中添加大量组件
• Spring Boot在做任何功能都需要从容器中获取这个功能的组件
• Spring Boot 总是遵循一个标准;容器中有我们自己配置的组件就用我们配置的,没有就用自动配 置默认注册进来的组件;