聊一聊SpringBoot的启动流程?
SpringBoot,启动!主要包括创建SpringApplication对象和执行run方法两部分。
在SpringApplication构造方法内部执行时,它首先会确认web应用的类型,默认是servlet类型的,这种类型的后面会自动开启一个tomcat。
然后,再读取spring.factories配置文件,加载对应的ApplicationContextInitializer和ApplicationListener实现类。
最后,还会记录一下当前应用的启动类,将来做bean扫描时会用到。
然后就是执行run方法了,这一步会真正的实例化IOC容器以及创建容器所需要的非懒加载的单例bean。
具体步骤就是首先准备Environment对象,里面封装了应用运行时所需要的环境参数,例如环境变量等。
然后,就会实例化IOC容器,会先创建一个ApplicationContext对象。
再然后,就是为IOC容器设置Environment,BeanPostProcessor等,并加载主类对应的definition
最后,执行refresh方法,创建所有非懒加载的单例bean实例,最终返回一个ConfigurableSpringApplication
聊一聊IOC容器的初始化流程?
执行AbstractSpringApplication的refresh()方法,具体包括:
1.准备BeanFactory,这一步需要给BeanFactory设置很多属性,比如类加载器ClassLoader、Environment等
2.执行BeanFactoryPostProcessor,这一步会扫描所有的beanDefinition信息
3.注册BeanPostProcessor
4.启动tomcat
5.通过beanfactory创建所有非懒加载的单例bean,初始化IOC容器完成
6.做一些容器扫尾工作,例如清理三级缓存