spring boot启动流程图
2016-10-19 18:07:58 38 举报
solr服务架构
作者其他创作
大纲/内容
创建StandardEnvironment对象&,配置environment的conversionService和初始化一些系统配置
finishRefresh
构造一个Environment对象并初始化,比如:加载配置文件等工作
广播starting事件
创建StandardEnvironment
钩子
通过加载所有jar包中的spring.factories文件里的配置来找到所有实现context.ApplicationContextInitializer.class的扩展类,span style=\"font-size: inherit;\
发布context loaded事件
钩子:观察者模式,观察整个应用启动过程
设置webApplicationType为none
把父application里的MainClass设置到ApplicationBuilder里
根据启动类上的注解,是否Component判断是否需要注册到context中
创建父容器BootstrapApplicationContext
设置contextId为【bootstrap】
有谁关注该事件吗?
发送ApplicationReadyEvent事件
设置primarySource为BootstrapImportSelectorConfiguration
通过扫描类路径下是否存在某些类为依据,来推测应用类型。REACTIVE是xxx
发布contextPrepared事件
钩子:获取Context的构造器
通过[springcloud]BootstrapApplicationListener来构造一个父Context(ConfigurableApplicationContext)。这是springBoot应用的context与SpringMVC?? context产生联系就是通过这里扩展的监听器实现的。
添加一个Initializer,好让儿子application的context设置自己为父context
callRunners
设置启动类为primarySource
构造一个spring应用的对象
创建BeanDefinitionLoader并load source(configuration)并注册到registray(context)中
Create&Prepare Environment
为了创建AnnotationConfigApplicationContext
create&prepare context
执行所有添加的ApplicationContextInitializer
设置能够获取钩子的钩子
有谁关注starting事件吗?
将上面创建好的environment设置到context中
推测应用类型webApplicationType为REACTIVE/NONE/SERVLET
开始run
4:通过加载所有jar包中的spring.factories文件里的配置来设置spring.context.ApplicationListener.class用来关注整个springContext的构造过程,context构造过程中通过onApplicationEvent来触发各监听器,如果是自己感兴趣的event则处理,否则忽略。
当前spring的实现中,会添加下面这个扩展类(spring.boot.context.event.EventPublishingRunListener),用于发布spring应用启动过程中给所有listener发布广播事件,目前的事件有ApplicationStartingEventApplicationEnvironmentPreparedEventApplicationContextInitializedEventApplicationPreparedEventApplicationStartedEventApplicationReadyEventApplicationFailedEvent
执行所有的initializer,构造context,为refresh过程做准备,基于Refresh过程提供的扩展点增加指定扩展功能,核心扩展功能有:1、添加BeanFactoryPostProcessor[CachingMetadataReaderFactoryPostProcessor]2、添加ApplicationListener[ConditionEvaluationReportListener]3、添加BeanFactoryPostProcessor[ConfigurationWarningsPostProcessor4、添加监听器ApplicationListener[ServerPortInfoApplicationContextInitializer]5、添加PropertySourceOrderingPostProcessor6、添加BeanFactoryPostProcessor[ConfigurationClassPostProcessor]
发送ApplicationStartedEvent事件
把父application里的envirment里的propertySource放到上面 新建的environment里
发布EnvironmentPrepared事件,可以通过该扩展点,来对Environment对象加入更多的自定义配置
refresh
创建SpringApplication对象
0 条评论
下一页