tmpspringboot流程

SpringApplication.run方法逻辑:

1、创建ApplicationArguments对象
applicationArguments -> new DefaultApplicationArguments(args)
|- source -> new DefaultApplicationArguments$Source(args)
"commandLineArgs" commandLineArgs
source的类图如下:
Source
SimpleCommandLinePropertySource
CommandLinePropertySource
EnumerablePropertySource
PropertySource
|- name "commandLineArgs"
|- T commandLineArgs
2、创建environment对象,顺便创建下面的propertySources对象
ConfigurableEnvironment environment -> new ApplicationServletEnvironment
|- propertyResolver ConfigurationPropertySourcesPropertyResolver
|- propertySources MutablePropertySources
[StubPropertySource {name='servletConfigInitParams'},
StubPropertySource {name='servletContextInitParams'},
PropertiesPropertySource {name='systemProperties'},
SystemEnvironmentPropertySource {name='systemEnvironment'}]
new SimpleCommandLinePropertySource(args)
3、创建ApplicationContext对象
context -> AnnotationConfigServletWebServerApplicationContext
context.addBeanFactoryPostProcessor(new PropertySourceOrderingBeanFactoryPostProcessor(context));
4、调用刷新方法回到以前spring的流程
refreshContext -> refresh(context); -> applicationContext.refresh();回到以前的spring正常流程,之后jayspt的beanfactory后置处理器被调用,把environment.propertySources里所有PropertySource都给包装一下重新赋值到environment里。
总结:
1、springboot比spring多了上面步骤12步骤。
2、springboot里给bean设置字符串属性时读取值遍历上面多个propertySources对象,每个对象当成map就行,有的对象对应application.yml,有的对应启动脚本里的入参参数集合,有的对应当前系统的环境遍历,有的对应webcontext(我估计类似以前web.xml)里的key,value集合。
posted @   bplan2010  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示