Spring Bean 加载流程
2022-07-22 01:17:50 0 举报
Spring Bean 加载流程
作者其他创作
大纲/内容
初始化前调用,可以自己实现@PostConstruct
类XMLAnnotation
postProcessMergedBeanDefinition
Bean后置处理器九处调用
doGetBean()获取Bean对象
DestructionAwareBeanPostProcessor
addSingleton()
singletonObjects是否创建完成
getSingleton()单例池中是否存在
postProcessAfterInstantiation
2. 扫描出符合@ComponentScans要求的配置类
修改
invokeBeanFactoryPostProcessors()
解决循环引用AOP
finishBeanFactoryInitialization(beanFactory)初始化所有单例Bean
put
doCreateBean()
三级缓存
概念态xml、注解标注类
A
postProcessAfterInitialization
填充属性 Populate()@Autowired@Value等
singletonObjectsislnCreating()是否正在创建
getBean()
Addsingleton()
AnnotationConfigApplicationContext 用于注解+配置类的(会自动添加后置处理器)
纯净态BeanDefinition
实例化Instantiation()
xml/注解中的属性被扫描封装在BeanDefinition中
BeanDefinitionReader
处理成getObject想要的Bean
BeanPostProcess
destroyMethodName设置销毁方法的名称
1. 读取配置类
xml/注解标注的类里面有一系列对Bean的描述
假如出现循环依赖
@AutoWird @Value预解析
BeanDefinitionRegistry
BeanFactoryProcessor
此getSingleton()方法若Bean不存在,会创建后调用addSingleton
BeanDefinitonMap
是否是FactoryBean(工厂Bean)
preInstantiateSingletons() 实例化单例非懒加载的bean
propertyValues表示一个属性键值对
注入属性PropertyValues@AutoWired在这里进行依赖注入
initMethodName设置初始化方法的名称
autowireCandidate设置此Bean是否自动装配到其他Bean对象
B依赖A
getEarlyBeanReference
primary设置此Bean是否自动装配
... ...
InstantiationAwareBeanPostProcessor
初始化Initialization()
填充属性 Populate()
BeanDefinitonRegistryPostRocessor
createBean
否
scope覆盖Bean的作用域,指定一个新的作用域
是
BeanDefiniton
dependsOn定义Bean依赖先初始化
注册
指定实例化构造函数
B
存在
不存在创建
earlySingletonObjects
lazyInit设置此Bean是否延迟加载
MergedBeanDefinitionPostProcessor
可以直接返回Bean,停止后面的流程AOP解析切面
SmartInstantiationAwareBeanPostProcessor
A依赖B
ClassPathXmlApplicationContext读取类路径下的配置文件
invokeBeanDefinitonRegistyPostProcessors()执行完成后BeanDefinitonMap中的各种Bean定义
拿到实例对象
Bean 初始化过程的几种形态
可终止属性赋值
成熟态单例池中的Bean
factoryBeanName指定使用工厂Bean
singletonFactories
初始化完成等工作做完后放入单例池中给应用使用的成熟Bean
循环依赖 getBean(A)
定义态BeanDefinition
实例化Instantiation()反射实现
parentName设置此Bean父类的名称
3. 注册程BeanDefiniton
requiresDestruction
Benan生命周期
初始化前调用,可以自己实现AOP创建代理
postProcessBeforeInitialization
BeanDefinition
BeanDefinitonSacnne
postProcessPropertyValues
早期Bean,二级缓存中为解决依赖而设置的一种形态
初始化Initalization()
beanClassName指定此Bean定义Bean的类名
getBean(\"xxx\")
determineCandidateConstructors
0 条评论
下一页