Spring源码学习(九)

Spring源码学习之今天下雨

Posted by GuiLing on September 2, 2019

Spring源码解析(九)

接着上次的说:

1567341462131

上次说到,当bean是单例的时候回去创建Bean进入到createBean中有了以前的经验我们可以知道,createBean这个方法应该没有真正创建Bean,进去看一下:

1567341804596

在这个方法里可以知道首先解析了这个Bean的定义信息这个解析的过程这里我们先略过Class<?> resolvedClass = resolveBeanClass(mbd, beanName);

下面的这个方法比较重要Object bean = resolveBeforeInstantiation(beanName, mbdToUse);看这个注释可以大概知道这个方法是让BeanPostProcessor先拦截返回代理对象

1567343006420

再看方法bean = applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);这里要先执行实例化的前置处理器InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(beanClass, beanName) 方法

1567343148326

执行完所有.postProcessBeforeInstantiation(beanClass, beanName)postProcessAfterInitialization(result, beanName);方法后进入到doCreateBean方法。

1567343849266

在解析Bean的定义信息后没有找到Bean的Class信息所以调用BeanFactory的方法创建Bean

1567343946722