入口 @SpringBootApplication
方法:SpringApplication.run() 方法
一,服务构建
创建SpringApplication对象,SpringApplication构造方法需要传入资源加载器,主类方法。
配置banner,log,Listener ,容器类型等属性及策略。
从spring.factories 文件中获取 注册器初始化BootStrapResgistryintializer 默认没有 ,上下文初始化ApplicationContextInitalizer 默认7个 ,监听器 ApplicationListener 默认8个
二,环境准备
SpringApplication.run() 方法。
1,创建新的初始化器容器 createBootStrapContext() ,因为默认没有初始化器,没有另外的操作;
2,引入Listener ,执行监听 观察者模式 串行执行
3,prepareEnvironment 准备环境参数 ,系统环境变量,jvm系统属性,启动参数 。发布环境准备完成事件,监听器串行执行
4,设置 无输入设备启动 awtheadless = true ; 元数据不加载 beanInfo.ignore = true ; banner 打印。
三,容器创建阶段
ApplicationContext。
1,createApplicationContext 创建容器
2,放入beanfactory 默认DefaultListableBeanFactory;
3, 放入后置处理器 configurationClasspostProcessor 解析Component,ComponentScan注解 ;AutowiredAnnotationBeanPostProcessor 解析Autowored,Value,Inject 注解,和CommonAnnotationBeanPostProcessor。
4,prepareContext 对容器部分属性进行初始化,设置bean名称生成器,资源加载器,类型转换器等;执行上下文初始化器实现,容器id,警告日志处理,日志监听都是在这里实现的 。
5,发布容器准备完成监听事件,
6,为容器注册启动参数,banner,bean引用策略,懒加载策略等;将资源加载到 bean定义池BeanDefinitionMap,以便后续使用
7,发布资源加载完成事件
四,填充容器
自动装配
发布启动完成事件
回调自定义的runner接口