Spring Bean 加载流程
2021-12-12 23:32:28 119 举报
Spring Bean 加载流程
作者其他创作
大纲/内容
Addsingleton()
两个扩展点
determineCandidateConstructors
BeanFactoryPostProcessor
SmartInstantiationAwareBeanPostProcessor
3.注册成BeanDefinition
factoryBeanName
bean的生命周期
假如出现循环依赖
BeanDefinitionRegistryPostProcessor
N
getBean(\"xxx\")
InstantiationAwareBeanPostProcessor
定义态BeanDefinition
链接
类XMLAnnotation
BeanDefinitionReader
singletonObjects是否创建完成
addSingleton()
preInstantiateSingletons()
拿到实例对象
(反射实现)
requiresDestruction
lazyInit
BeanPostProcess
scope
二三级缓存
false
不存在,创建
B 依赖 A
Y
BeanDefinition
循环依赖 getBean(A)
invokeBeanDefinitionRegistryPostProcessors()执行完成后BeanDefinitionMap中有各种Bean定义
初始化等工作做完后放入单例池中给应用使用的成熟的bean
getBean()
实例化 Instantiation()
beanFactory.getBean()
createBean
earlySingletonObjects
......
指定实例化构造函数
getEarlyBeanReference
BeanDefinitionMap
可终止属性赋值
2.扫描出符合@ComponentScans 要求的配置类
填充属性 Populate()
isInCreating()是否正在创建
put
存在
doCreateBean()
修改
singletonFactories
解决循环引用 AOP
MergedBeanDefinitionPostProcessor
ClassPathXmlApplicationContext
@AutoWired @Value 预解析
注册
A
primary
BeanDefinitionSacnne
Bean后置处理器的九处调用
BeanDefinitionRegistry
postProcessAfterInstantiation
... dependsOn
bean 初始化过程中的几种形态
简单工厂模式
addsingletonFactory()
B
beanClassName
初始化 Initialization()
xml/注解标注的类里面有一系列对Bean的描述
... ...
1.读取配置类
处理成getObject想要的bean
A 依赖 B
DestructionAwareBeanPostProcessor
@Autowired @Value等
纯净态BeanDefinition
postProcessPropertyValues
AnnotationConfigApplicationContext
postProcessMergedBeanDefinition
autowireCandidate
成熟态单例池中的Bean
是否是FactoryBean
parentName
初始化前调用,可以自己实现@PostConstruct
概念态xml、注解标注类
destroyMethodName
invokeBeanFactoryPostProcessors()
getSingleton()单例池中是否存在
注入属性PropertyValues @AutoWired 在这里进行依赖注入
postProcessBeforeInitialization
可以直接返回bean,停止后面的流程AOP解析切面
doGetBean()
postProcessAfterInitialization
早期Bean,二级缓存中为解决忙依赖而设置的一种形态
标记为正在创建
初始化前调用,可以自己实现AOP创建代理
propertyValues
finishBeanFactoryInitialization(beanFactory)
font color=\"#f44336\
initMethodName
xml、注解中的属性被扫描成封装在BeanDefinition中
0 条评论
下一页