Spring源码分析
2020-05-28 15:48:27 93 举报
Spring源码分析
作者其他创作
大纲/内容
注册
这里如果没拿到,会去找父Factory,然后递归去寻找是否有Bean
实现Ordered接口的按照顺序排序执行
反射生成Bean实例
获取上面注册的ApplicationListener添加到ApplicationEventMulticaster
按照priorityOrderedPostProcessors,internalPostProcessors,orderedPostProcessorNames,nonOrderedPostProcessorNames分类
sortPostProcessors
addEmbeddedValueResolver,添加占位符转换器,处理占位符
处理剩余的BeanPostProcessor
getBean
obtainFreshBeanFactory
处理上面得到的nonOrderedPostProcessorNames放入nonOrderedPostProcessors
prepareRefresh
finishRefresh
所有实现了Ordered接口的orderedPostProcessorNames
如果有加载时织入的类,用@Bean注解标志的,那就在处理器列表里注册一个加载织入处理器。
LoadTimeWeaverAwareProcessor
在应用程序上下文的标准初始化之后修改它的内部bean工厂。所有bean定义都已加载,但还没有实例化任何bean。这允许覆盖或添加属性,
getBeanFactory
transformedBeanName
registerBeanPostProcessors
实例化Bean并执行注册进来的所有BeanPostProcessor通过标记接口或类似的方式填充bean的后处理器将实现postprocessbeforeinitialize,而使用代理包装bean的后处理器通常将实现postprocessafterinitial。
prepareBeanFactory
在上下文中获取所有实现了ApplicationListener接口的类添加到ApplicationEventMulticaster
initMessageSource
执行从beanFactory中get到的BeanFactoryPostProcessors对BeanFactory中的BeanDefinition进行增强
排序
preInstantiateSingletons,初始化所有的剩余的单例类
doGetObjectFromFactoryBean
registerListeners
处理PriorityOrdered的Processors
创建beanFactory,加载配置文件内容
执行传入的BeanDefinitionRegistryPostProcessor对BeanFactory中的BeanDefinition进行增强
如果是MergedBeanDefinitionPostProcessor就放入internalPostProcessors
getObjectForBeanInstance
实现PriorityOrdered接口的按照顺序排序执行
剩余的按照顺序排序执行
doGetBean
所有实现了PriorityOrdered接口的放入priorityOrderedPostProcessors
初始化MBean相关并注册上下文registerApplicationContext
拿到所有的BeanPostProcessor,getBeanNamesForType(BeanPostProcessor.class)创建他们的checker
执行从beanFactory中get到的BeanDefinitionRegistryPostProcessor对BeanFactory中的BeanDefinition进行增强
invokeBeanFactoryPostProcessors
publishEvent发布结束事件
拿到FactoryBean
初始化事件广播器
finishBeanFactoryInitialization
addDefaultConverters,添加转换器服务,如数组转集合等
isSingletonCurrentlyInCreation
postProcessObjectFromFactoryBean
beforeSingletonCreation
afterSingletonCreation
初始化环境变量
所有实现了Ordered接口的放入orderedPostProcessors
广播earlyApplicationEvents
收尾工作,删除那几个处理循环依赖的map里关于这个单例的相关信息。至此,创建一个单例就完成了
真正初始化所有Bean的地方
检测实现ApplicationListener接口的bean的BeanPostProcessor
初始化消息源,如果是可继承消息源,寻找其父类
如果没在创建,则注册该实例到正在创建Map中,这是为了解决并发问题
处理上一步得到的orderedPostProcessorNames集合来处理Ordered的Processors
用上一步拿到的FactoeyBean来初始化Bean
创建一个BeanFactory
看是否正在创建,如果正在创建直接返回
在bean定义加载完,但还没实例化之前,进行一些类似属性上的修改,SPI之类,或者处理@Configuration的都在这进行增强即:与bean的定义交互
处理上面三步得到的internalPostProcessors
ApplicationEventMulticaster
剩余的放入nonOrderedPostProcessorNames
getSingleton
initLifecycleProcessor初始化生命周期处理器
refreshBeanFactory
执行注册在该beanFactory中的所有的BeanPostProcessor的postProcessAfterInitialization方法
做一些主备工作,1:注销一些不自动注入,不依赖的接口,2:给一些接口注入上下文,3:增加一个检测实现了ApplicationListener接口的处理器4:注册环境单例类到单例注册表
注册ApplicationListenerDetector
onRefresh刷新生命周期处理器
LoadTimeWeaverAware初始化载入时织入感知类
0 条评论
下一页