🚀 优质资源分享 🚀
| 学习路线指引(点击解锁) | 知识定位 | 人群定位 |
|---|---|---|
| 🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
| 💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
到目前为止,我们知道Spring创建Bean对象有5中方法,分别是:
- 使用
FactoryBean的getObject方法创建 - 使用
BeanPostProcessor的子接口InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法创建 - 设置
BeanDefinition的Supplier属性进行创建 - 设置
BeanDefinition的factory-method进行创建 - 使用全过程:
getBean-->doGetBean-->createBean-->doCreateBean反射进行创建
前面4中已经介绍,接下来介绍第5种,我们知道如果使用反射创建,那么必然要知道使用构造函数进行实例化,因为使用构造函数能够将带有参数的设置进去。
SmartInstantiationAwareBeanPostProcessor 接口
在前面讲过InstantiationAwareBeanPostProcessor 是用来提前实例化对象的,而SmartInstantiationAwareBeanPostProcessor 是InstantiationAwareBeanPostProcessor 的子接口,他是用来干啥呢?
在createBeanInstance方法中的源码:
// 省略代码....
// 明确构造器从BeanPostProcessor中,对应的是 AutowiredAnnotationBeanPostProcessor
// 他是 SmartInstantiationAwareBeanPostProcessor 的子类,使用determineCandidateConstructors进行
// 解析构造函数
Constructor[] ctors = determineConstructorsFromBeanPostProcessors(beanClass, beanName);
if (ctors != null || mbd.getResolvedAutowireMode() == AUTOWIRE_CONSTRUCTOR ||
mbd.hasConstructorArgumentValues() || !ObjectUtils.isEmpty(args)) {
return autowireConstructor(beanName, mbd, ctors, args);
}
// 省略代码....
点进去:
protected Constructor[] determine

本文探讨了Spring框架中Bean的创建过程,特别是SmartInstantiationAwareBeanPostProcessor接口的角色,它用于解析构造函数并提前实例化对象。BeanWrapper的作用在于属性类型转换和值解析。MergedBeanDefinitionPostProcessor接口与注解处理相关,其实现类在容器初始化和销毁时发挥作用。
最低0.47元/天 解锁文章
887

被折叠的 条评论
为什么被折叠?



