栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每天一点点,Spring创建bean实例 AbstractAutowireCapableBeanFactory#createBeanInstance

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每天一点点,Spring创建bean实例 AbstractAutowireCapableBeanFactory#createBeanInstance

Spring 执行创建bean实例逻辑AbstractAutowireCapableBeanFactory#createBeanInstance
1、确保当前类已加载

Class beanClass = resolveBeanClass(mbd, beanName);

1.1、 AbstractBeanFactory#resolveBeanClass
1.1.1、如果已解析直接返回解析的class

if (mbd.hasBeanClass()) {
	return mbd.getBeanClass();
}

1.1.2、执行解析 AbstractBeanFactory#doResolveBeanClass

2、如果当前BeanDefinition设置的有Supplier方法,直接调用此方法生成bean对象

Supplier instanceSupplier = mbd.getInstanceSupplier();
if (instanceSupplier != null) {
	return obtainFromSupplier(instanceSupplier, beanName);
}

2.1、AbstractAutowireCapableBeanFactory#obtainFromSupplier

instance = instanceSupplier.get();

3、判断有没有设置factory-method,如果有直接使用

if (mbd.getFactoryMethodName() != null) {
	return instantiateUsingFactoryMethod(beanName, mbd, args);
}

4、检查一下缓存中是否已经缓存了可用的构造方法和构造方法需要的参数,存在则直接使用

5、得到候选的构造函数

Constructor[] ctors = determineConstructorsFromBeanPostProcessors(beanClass, beanName);

6、实例化

if (ctors != null || mbd.getResolvedAutowireMode() == AUTOWIRE_ConSTRUCTOR ||mbd.hasConstructorArgumentValues() || !ObjectUtils.isEmpty(args)) {
	return autowireConstructor(beanName, mbd, ctors, args);
}
return instantiateBean(beanName, mbd);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/750412.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号