Spring 源码(14)Spring Bean 的创建过程(5)
到目前为止,我们知道 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[] determineConstructorsFromBeanPostProcessors(@Nullable Class
beanClass, String beanName)
throws BeansException {
if (beanClass != null && hasInstantiationAwareBeanPostProcessors()) {
for (BeanPostProcessor bp : getBeanPostProcessors()) {
if (bp instanceof SmartInstantiationAwareBeanPostProcessor) {
评论0
最新资源