SpringBoot启动流程图
2021-02-17 23:28:31 0 举报
SpringBoot启动流程图 待完善
作者其他创作
大纲/内容
封装成BeanDefinition存入IoC容器
判断是否已经实例化
自动配置类部分配置类已经实例化
生成应用上下文实例AnnotationConfigServletWebServerApplicationContext(内部持有IoC容器实例)
注册BeanFactory的后置处理器
tomcat加载流程子类ServletWebServerApplicationContext
创建配置应用环境系统和用户自定义环境信息
注册Bean的后置处理器
获取@Component/@Configuration标注的Bean等
从Package加载
获取符合条件的自动配置类列表,注册自动配置类导入事件
子类实现自定义刷新逻辑onRefresh
注册应用监听器
初始化TomcatWebServer,启动Tomcat
获取到@Import导入的组件
在此设置注解形式Bean读取器, XML形式Bean读取器,类路径扫描器
DispatcherServletRegistrationBean类onStart()
执行@Import组件类deferredImportSelectorHandler.process()
刷新上下文环境
内部子流程开始
子流程
SpringApplication成员方法
SpringApplication.run()
构建应用上下文环境
获取ServletContextInitializer执行onStart()
初始化应用事件广播
设置Tomcat目录、引擎配置Tomcat启动后回调(ServletContextInitializer类型)
@Import
【注2】初始化classpath下 META-INF/spring.factories中已配置的 ApplicationListener,获取到类的全限定名后通过反射获取了实例存在listeners列表
初始化应用上下文
打印Tomcat启动日志
子类ServletWebServerApplicationContextinishRefresh
初始化Message组件等
执行后置处理器(内部设置转换器等)
【注1】初始化classpath下 META-INF/spring.factories中已配置的 ApplicationContextInitializer,获取到类的全限定名后通过反射获取了实例存在initializers列表
【注3】启动EventPublishingRunListener监听器实例,向ApplicationListener发送应用启动相关事件,它也是从文件META-INF/spring.factories中获取并生成的实例
启动项目配置文件监听器
获取webServer(携带ServletContextInitializerl类型的回调方法)
准备BeanFactory
从IoC容器获取/实例化WebServerFactory
在此步主类被按注解扫描到,封装成BeanDefinition注入到DefaultListableBeanFactory的beanDefinitionMap中
servletContxt为空
实例化Tomcat
在此获取到了@SpringBootApplication上@Import导入的两个用于自动配置的组件
完成刷新工作finishRefresh
获取嵌入式容器工厂WebServerFactory
推断应用类型(servlet)
创建IoC容器DefaultListableBeanFactory
准备刷新应用上下文
执行初始化器(initializers列表中)
启动WebServer
实例化DispatcherServlet和DispatcherServletRegistrationBean
静态run方法调用
创建BeanDefinitionLoader
后置处理器工作的时机是在所有的beanDenifition加载完成之后,bean实例化之前执行。可以修改BeanDefinition的属性信息
监听器发布应用准备好事件
启动servlet等(直接继承HttpServlet的实例等)
递归处理@Import注解
按Exclusion过滤排除,排序自动配置类
@Bean注解
加载所有jar包META-INF/spring.factories文件读取自动配置类全限定名,按添加排除不需要加载的剩余自动配置类组成列表封装成AutoConfigurationEntry对象
获取主类包路径
回调ServletWebServerApplicationContext类selfInitialize方法
run()
设置应用环境
生成剩下所有非懒加载的单例bean
推断main方法类名
初始化的应用初始化器【注1】
实例化TomcatWebServer
从Resource加载
触发自动配置类导入事件
初始化应用监听器【注2】
从Class加载Bean
IoC容器将所有bean实例化之后才开始启动Web服务器
DispatcherServlet自动配置
自动配置子流程
子流程IoC源码中容器刷新方法
ServletRegistrationBean类将DispatcherServlet注册进servletContext(内嵌的Servlet容器)
开始创建webServer
刷新应用上下文
new SpringApplication()
获取并启动RunListenter【注3】
获取或创建BeanFactory
执行beanFactory的后置处理器invokeBeanFactoryPostProcessors
执行包扫描获取包及子包下的Bean
递归处理@Bean注解
递归扫描
发布应用已加载事件
加载启动类启动类注入应用
DispatcherServletAutoConfiguration类上标注@AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class),在WebServerFactory实例化之后进行DispathcherServlet相关的自动配置
刷新应用上下文扩展接口
RegisterBean类onStart()方法
触发 AutoConfigurationImportEvent 事件,告诉ConditionEvaluationReport 条件评估报告器对象来记录符合条件的自动配置类
收藏
0 条评论
下一页