springboot启动之run方法
2022-11-01 10:22:25 13 举报
AI智能生成
springboot启动之run方法
作者其他创作
大纲/内容
getRunListeners()->存在一个getSpringFactoriesInstances() :通过指定的classloader 从META-INF/spring.factories获取指定的Spring的工厂实例
SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting();
最终获得监听器为:EventPublishingRunListener ,此监听器是Spring容器的启动监听器
1 获取并启动监听器
上下文环境包括:计算机的环境,Java环境,Spring的运行环境,Spring项目的配置(在SpringBoot中就是那个熟悉的application.properties/yml)等等
2构造应用上下文环境
// ConfigurableApplicationContext Spring 的上下文 ConfigurableApplicationContext context = null; context = createApplicationContext();
声明的context 就是我们熟悉的上下文(容器) context 包含了 beanFactory的ioc容器
初始化应用上下文
这里简单描述就是: 判断启动类上是否标注@componse注解,存在后将此类封装成AnnotatedGenericBeanDifinition ,最后将这个歌beanDifinition注册到 beanDifinitionMap中
4刷新应用上下文前的准备工作
refreshContext(context);
跳转:从refreshContext()[springboot]-> refresh()[spring]->InvokeBeanFactoryPostProcessors(beanFactory)[refresh方法中的方法]此时 springboot的工作已经完成,将ioc容器初始化bean交给了spring完成
Resource: 主要注册的bean定位在,1主类所在的包下,2SPI扩展机制实现的自动装配,3 @Import注解指定的类
BeanDifinition载入:定位后得到basePackage ,springboot将其路径拼接为:(classpath:com/xxx/**/.class)形式,根据这个路径去将文件加载进来,然后判断是否为@component 注解标注,如果是则装载成BeanDifinition
BeanDifinition注册:最终会将这些BeanDifinition注册到ConcurrentHashmap中(比如 DefaultLIstableBeanFactory中的 BeanDifinitionMap属性)
ioc容器初始化包括三个步骤:1Resource定位2BeanDifinition的载入3注册BeanDifinition
5刷新应用上下文(最重要的方法)
扩展接口,设计模式中的模板方法,默认为空实现。如果有自定义需求,可以重写该方法。比如打印一些启动结束log,或者一些其它后置处理。
6刷新应用上下文的扩展接口
springboot启动之run方法
收藏
收藏
0 条评论
回复 删除
下一页