SpringIOC流程
2022-05-25 16:04:53 0 举报
ioc流程
作者其他创作
大纲/内容
beanFactory.preInstantiateSingletons();
beanFactory.freezeConfiguration();
没有,则通过getBean方法获取
Object alreadyThere = this.factoryBeanObjectCache.get(beanName);
转换BeanName:transformedBeanName(name);
结束
配置类型转换器
递归调用bean
Bean构造完成之后,初始化之前
publishEvent(new ContextRefreshedEvent(this));
prepareRefresh()
注册依赖关系
是否用抽象函数创建bean
getBean(dep);
看看是否有用户接管bean的生成
逐个执行实现了容器级别注册beanDefinition的方法
获取Autoware候选者
注入值
object = getCachedObjectForFactoryBean(beanName);
开始创建bean
国际化方言配置
发布容器刷新完成事件
registerBeanPostProcessors(beanFactory);
根据Order注解
选举候选者
onRefresh();
BeanUtils.instantiateClass(constructorToUse);
填充属性
准备BeanFactory
将bean放入三级缓存中
mbd.getInstanceSupplier();
此方法调用主要是为了获取factoryBean的对象
getAutowireCandidateResolver().getSuggestedValue(descriptor);
根据beanName匹配
获取环境默认属性值
初始化完成
isPrototypeCurrentlyInCreation(beanName)
registerListeners()
beanFactory.setConversionService()
解析后如果为空则直接返回bean,否则
判断是否在原型模式的创建中,是的话抛出异常
markBeanAsCreated(beanName);
放入缓存
通过postProcessAfterInstantiation对bean属性做最后的修改,并装配,最终返回是否需要spring装配
finishRefresh();
buildAutowiringMetadata(clazz);
获取md中打上了depends-on标签bean名称
初始化事件发布器,方便后续事件发布
属性值解析器,如xml中的${dubbo.version}
循环依赖在此处解决
在该方法中进行属性填充
bean为空或者不为单例
initPropertySources()
AbstractApplicationContext
注册bean 级别的后置处理器
afterSingletonsInstantiated()
返回bean
getCachedObjectForFactoryBean(beanName);
初始化BeanWrapper
没有的话检查是否有工厂方法创建实例( factory-method),有的话通过工厂方法创建
预留给AbstractApplicationContext子类初始化其他特殊的bean
getEnvironment().validateRequiredProperties();
prepareBeanFactory(beanFactory);
允许子类注册postProcessor
创建metadata
无
冻结所刷新的配置
getEnvironment().resolvePlaceholders(strVal)
针对xml
invokeBeanFactoryPostProcessors(beanFactory);
mbd.getDependsOn();
Bean构造完成之后,初始化之后
在此判断是否为空,因为factoryBean是由用户实现的,可能getBody()为异步线程
mbd.getFactoryMethodName()
后置处理器
refresh()
解析类
批量处理实例化之好的Bean
调用初始化方法,即实现InitializingBean
获取不到的情况并且为单例则开始创建bean
postProcessBeanFactory(beanFactory);
refreshBeanFactory()
factory.getObject();
获取bean实例
finishBeanFactoryInitialization(beanFactory);
告诉子类调用refreshBeanFactory刷新ApplicationContext状态注册BeanDefinition
将该bean标记为需要创建的标记
调用getObject
getBean(beanName);
调用匿名函数
对Autoware, value注解标记的属性进行标记并封装到metadata
此处获取的是@Value的值
验证是否还有需要的属性需要加载
initMessageSource();
先从缓存中获取
解析bean获取bean的class:
初始化无参构造方法
beanFactory.getBean(beanName)
initApplicationEventMulticaster();
初始化bean
singletonFactory.getObject();
mbd = getMergedLocalBeanDefinition(beanName);主要获取mbd.synthetic属性。看该bean能否被修改
获取呗autoWare标注的属性值
obtainFreshBeanFactory()
return Bean
注册监听器
实例化所有懒加载的单例对象
获取单例Bean: getSingleton(beanName);
initBeanWrapper(bw);
收藏
0 条评论
回复 删除
下一页