SpringBoot源码解析
2020-04-30 17:38:09 0 举报
SpringBoot源码解析,包括各个模块,未完待续···
作者其他创作
大纲/内容
存在
TextBanner#printBanner
DefaultProperties
循环所有资源文件spring.factories
将键值对保存到集合
supportsSourceType()
获取创建环境
YarnPropertySourceLoader
profiles大小为1
创建此接口适配器类
preInstantiateSingletons
setInitializers()保存初始化器到容器中,用List存储
是
fallbackBanner兜底banner
ready
configureEnvironment
load
查找缓存
默认Banner
获取Profiles相关配置
这里获取的是初始化器的实例,其他配置在factories中的类也是一样的加载流程
Github:PAcee1配合博客食用:http://www.pacee1.com/categories/springboot/
getSpringFactoriesInstances(ApplicationContextInitializer.class)
是否有缓存
AnnotationAwareOrderComparator.sort()对实例排序
failed
Loader.load()
直接使用此类进行下一步判断
spring.config.name
SpringBootBanner#printBanner
resolveBeforeInstantiation判断是否实现接口,创建代理对象
initializeProfiles()初始化Profiles
loadFactoryNames加载配置工厂,获取Initializer的实现
启动完成
AbstractBeanFactory
事件发布
否
getTextBanner添加文本Banner
createBean
supportsEvent判断此监听器是否绑定此事件
判断监听器是否与当前事件绑定
后缀为:yml/yaml
SpringBoot Profile加载流程
getImageBanner添加图片Banner
将文件内profiles.active和profiles.include属性值保存到profiles,后面继续读取遍历
JNDI
multicastEvent派发事件
SpringBoot事件监听机制
doGetBean
ServletConfig
保存结果集合到缓存
获取Environment中Definition集合
loadForFileExtension
启动报错
获取环境中active|include profile
获取Loaded集合中value集合
printBanner
循环所有监听器
contextInitialized
application.properties还没加载,所以将default配置在app里无效,需配在命令行active如果存在,就不会添加default,所以两者互斥
SpringBoot banner打印流程
application配置
GenericApplicationListener子类?
发送环境准备事件,ConfigFile再次配置环境
doCreateBean
循环获取键值对
getBannerprintBanner
SpringBoot#refresh 实例化Bean流程
添加default profile
调用实现类supportsEventType()
Factories工厂初始化器加载流程
populateBean对Bean进行依赖注入、属性填充
createSpringFactoriesInstances使用反射循环创建实例
PropertiesPropertySourceLoader
Random属性集
Environment环境校验转换
判断此监听器绑定的事件是否与当前事件相同
getOrCreateEnvironment
prepareEnvironment
convertEnvironmentIfNecessary
bindToSpringApplication
addLoadedPropertySources添加Loaded到Environment中
instantiate
SystemEnvironment
获取spring.config.loaction
load()加载Profiles到Loaded
initializeBean对Bean进行初始化操作(method-init)
retrieveApplicationListeners
application
配置属性方式
SpringApplication绑定一些属性
getSearchLocations获取配置文件存放路径
循环加载配置文件
DefaultListableBeanFactory
默认location
instantiateBean
prepared
SystemProperties
getInstantiationStrategy()默认使用Cglib进行Bean实例化
loadDocument()读取配置文件内容
ConfigurationPropertySources.attach
是否为空
SpringBoot Environment加载流程
print
ConfigurationProperties
读取资源文件内容spring.factories
保存到Loaded中
ImageBanner#printBanner
allListeners.add(listener);保存到监听器集合
getBean
InstantiationAwareBeanPostProcessorpostProcessBeforeInstantiation
ServletContext
started
spring.config.additional-location
true
run()
SpringFactoriesLoader
spring_application_json
添加ConfigurationProperties属性
获取监听器列表
后缀为:properties/xml
AbstractAutowireCapableBeanFactory
getApplicationListeners获取此事件的监听器列表
createBeanInstance
supportsEventType()
不存在
加载完成
starting
SpringApplicationRunListenerstarting
SmartApplicationListener子类?
end
判断此类是否绑定了事件
environmentPrepared
SpringBoot事件发布顺序
CommandLineArgs
getResource读取配置文件
getSearchNames获取配置文件前缀
getSingleton
返回Profiles集合
循环监听器列表调用其onApplicationEvent()
框架启动
listeners.environmentPrepared
调用实现类supportsSourceType()
所有监听器执行完毕
ConfigFileApplicationListener#addPropertySources
值用逗号分隔
初步配置环境
构建Profiles集合
集合中添加null目的是加载application.prop
new SpringApplication
getBanner
配置文件存在
finishBeanFactoryInitialization开始实例化单例Bean
循环Loaded ,依次添加到Environment中
正式加载传入配置文件内容
收藏
收藏
0 条评论
回复 删除
下一页