1 启动注解
@SpringBootApplication
此注解是SpringBoot框架最核心的注解,目的是开启自动配置,是整个SpringBoot应用程序的入口 ,它包含了三个子注解
- @SpringBootConfiguration
继承@Configuration,与其功能一致
- @EnableAutoConfiguration
开启自动配置
- @ComponentScan
配置扫描路径、扫描过滤器
2 启动方法
SpringApplication.run(Application.class, args);
run方法内会new一个SpringApplication对象,然后再执行它的run方法
3 SpringApplication对象
SpringApplication对象的构造方法中,初始化了一些重要的属性
1) resourceLoader
资源加载器
2) webApplicationType
web的应用类型(NONE-普通应用、REACTIV-web flux应用、SERVLET-web应用),deduceFromClasspath方法中,根据是否存在相应的指示类推测应用类型
3) bootstrapRegistryInitializers
引导程序初始化器,用getSpringFactoriesInstances方法,从spring.factories文件中获得BootstrapRegistryInitializer对象
4) initializers
初始化器,从spring.factories文件中获得ApplicationContextInitializer对象
5) listeners
监听器,从spring.factories文件中获得ApplicationListener对象
6) mainApplicationClass
main方法所在类的Class对象
根据main方法名返回启动类的Class对象
4 SpringApplication对象的run方法
运行时监听器
从spring.factories文件中获得所有运行时监听器对象,之后在启动springboot的过程中调用starting、contextPrepared、contextLoaded、started、ready等方法将启动相关事件发布出去
创建容器
run方法中最主要的操作是根据SpringApplication构造方法中产生的参数创建Spring容器
创建容器方法中用到的webApplicationType属性是上文提到的创建SpringApplication对象时根据指示类生成的web应用类型
准备工作
做刷新容器准备工作时会依次执行应用注册器、发布contextPrepared事件、添加Banner、把run方法中传进来的配置类注册到spring容器中
刷新容器
刷新spring容器,解析配置类,扫描、启动webserver
callRuners
在started和ready事件之间会执行添加到容器中的ApplicationRunner和CommandLineRunner对象的run方法,获得执行jar文件时传入的参数