spring-boot的启动流程
@SpringBootApplication
public class GaoyiyiApplication {
public static void main(String[] args) {
SpringApplication.run(GaoyiyiApplication.class, args);
}
}
@SpringBootApplication包括三个注解:
@EnableAutoConfiguration:SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置。简单概括一下就是,是借助@Import的帮助,将所有符合自动配置条件的bean定义加载到IoC容器。
@Configuration:它就是JavaConfig形式的Spring Ioc容器的配置类。被标注的类等于在spring的XML配置文件中(applicationContext.xml),装配所有bean事务,提供了一个spring的上下文环境。
@ComponentScan:组件扫描,可自动发现和装配Bean,功能其实就是自动扫描并加载符合条件的组件或者bean定义,最终将这些bean定义加载到IoC容器中。可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。默认扫描SpringApplication的run方法里的Booter.class所在的包路径下文件,所以最好将该启动类放到根包路径下。
过程:
第一部分
SpringAppliction会初始化一个实例
/META-INF/spring.factories文件:
将传入的启动类"com.example.ms.DemoApplication"放入Set集合中
判断是否为Web环境:存在(javax.servlet.Servlet && org.springframework.web.context.ConfigurableWebApplicationContext )类则是
创建并初始化ApplicationInitializer列表 (spring.factories)
创建并初始化ApplicationListener列表 (spring.factories)
初始化主类mainApplicatioClass (DemoApplication)
第二部分:
1初始化监听器
2发布ApplicationStartingEvent
3装配参数和环境
4发布ApplicationEnvironmentPrepareEvent,打印banner,创建并装配ApplicationContext
5发布ApplicationPrepareEvent(refreshContext->afterRefresh)
6发布ApplicationStartedEvent事件
7执行Spring中@Bean下的一下操作,如静态方法等
8发布ApplicationReadyEvent事件
SpringApplicationRunListener是一个抽象接口,定义Springboot启动的生命周期方法。
run方法会加载所有SpringApplicationRunListener的实现类,SpringBoot启动的各个生命周期中遍历所有SpringApplicationRunListener的实现类并调用对应的生命周期方法。
博客链接:https://blog.csdn.net/mnicsm/article/details/93893669
https://blog.csdn.net/qq_35119422/article/details/81559410
http://svip.iocoder.cn/Spring-Boot/Interview/