Spring源码
2023-12-13 15:26:59 20 举报
spring源码, 持续更新中...
作者其他创作
大纲/内容
否
遍历所有实现BeanPostProcessor接口的对象,调用postProcessBeforeInitialization()方法
检查合并之后的RootBeanDefinition是否是抽象的,如果是直接报错
transformedBeanName()
doCreateBean()
return bean;
((InitializingBean) bean).afterPropertiesSet()
实例化前
是
拿到的sharedInstance是否为空
确定给定bean的目标类型
如果需要检查依赖项则需要确保所有公开项是否都已经设置
非合成bean并且有实例化前的处理器
检测当前bean是否在创建中
getMergedLocalBeanDefinition合并beanDefinition
是否执行过实例化前操作
执行所有实现InstantiationAwareBeanPostProcessor接口的处理器
遍历所有实现InstantiationAwareBeanPostProcessor接口的postProcessAfterInstantiation方法
initializeBean()
初始化invokeInitMethods
调用getBean()创建依赖的bean
createBean()
createBeanInstance()实例化
isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod(\"afterPropertiesSet\"))
populateBean()
如果当前bean正在创建中则去三级缓存取值或者lambda表达式
属性填充(依赖注入)
doGetBean()
getBean()
实例化后属性注入前调用所有实现MergedBeanDefinitionPostProcessor接口的postProcessMergedBeanDefinition方法
是InitializingBean类型的并且(beanDefinition不为空或者不包含afterPropertiesSet成员)
1.把所要依赖的Depends都拿出来看是否都创建了bean。2.并检测是否出现循环依赖。3.将beanName和dependsOn里面需要依赖的bean映射到缓存map中
AbstractBeanFactory.getBean()
遍历调用所有实现BeanPostProcessor接口的postProcessAfterInitialization方法
执行初始化后流程
applyPropertyValues()
遍历所有实现BeanPostProcessor接口的对象,调用postProcessAfterInitialization()方法
resolveBeanClass()获取beanClass
bean的销毁逻辑
spring自带的依赖注入 @Bean注解里面有一个autowired属性指定值就会走这个逻辑。把所有的set方法找出来根据set参数的类型或者set后面的当作名字找bean
getObjectForBeanInstance()
将实例化过的标记设为(bean != null)
循环遍历所有实现了InstantiationAwareBeanPostProcessor接口的对象,调用postProcessProperties()方法
有返回值
设置aware回调参数
resolveBeforeInstantiation()
beanDefinition是否绑定了自己的class没有就把上一步的class设置进去
检查工厂中是否存在beanDefinition
看bean在不在单例池(一级缓存)和早期单例池(二级缓存)里面,如果没有就从singletonFactories(三级缓存)里面拿到一个lambda表达式(singletonFactory.getObject)执行得到一个实例,把他放进早期单例池
getSingleton()
标记当前bean正在创建中
return bean;
报错
创建bean
初始化后applyBeanPostProcessorsAfterInitialization
根据bean类型创建单例,原型或者是其他的bean
初始化
初始化前applyBeanPostProcessorsBeforeInitialization
0 条评论
下一页