🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
知识回顾
Bean
的创建过程会经历getBean
,doGetBean
,createBean
,doCreateBean
,然后Bean
的创建又会经历实例化,属性填充,初始化。
在实例化createInstance
时大致可以分为三种方式进行实例化:
- 使用
Supplier
进行实例化,通过BeanFactoryPostProcessor
对BeanDefinition
进行修改,增加一个Supplier
属性,放置一个lambda
表达式用于创建对象 - 使用
factory-method
进行实例化- 使用实例工厂实例化
- 使用静态工厂实例化
- 使用构造器反射进行实例化
- 使用
SmartInstantiationAwareBeanPostProcessor
解析构造器,然后反射实例化 - 使用无参构造器进行实例化
- 使用
在属性填充populateBean
时大致可以分为4个步骤:
- 调用
InstantiationAwareBeanPostProcessor
接口的after
方法修改Bean
的信息 - 自动装配,将解析的属性和属性值放入到
pvs
变量中- 按
autowireByType
自动装配 - 按
autowireByName
自动装配
- 按
- 执行通过
CommonAnnotationBeanPostProcessor
和AtowiredAnnotationBeanPostProcessor
解析的注解,然后注入到字段上 - 对属性的值进行解析,解析
pvs
, 会涉及到参数转换,spel
表达式解析,引用类型,String
类型,List
类型,Map
类型,Set
类型,Properties
类型的解析,属性编辑器的解析等。
接下来解读初始化阶段
bean的初始化
bean
的初始化initializeBean
方法,直接上源