深入源码理解SpringBean生命周期 (2)

深入源码理解SpringBean生命周期

实例化前

从createBean开始,见证Bean的实例化过程,首先是Bean实例化前的一个扩展点,它允许你自定义返回Bean实例。(AOP也是在这里生成代理对象的)

回调Bean实例化前的方法

AbstractAutowireCapableBeanFactory#createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)

深入源码理解SpringBean生命周期

主要是为了回调所有InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation(Class<?> beanClass, String beanName)方法,该方法会返回Object对象,如果返回的Object不为空,则会回调所有BeanPostProcessor的postProcessAfterInitialization(Object bean, String beanName)方法,那么返回的Object则会作为Bean去处理,如果返回Null,那么后续就会交由Spring来实例化、初始化(doCreateBean)。

深入源码理解SpringBean生命周期


深入源码理解SpringBean生命周期


深入源码理解SpringBean生命周期

自定义拦截实例化Bean后回调Bean后置方法

深入源码理解SpringBean生命周期


深入源码理解SpringBean生命周期

实例化

AbstractAutowireCapableBeanFactory#doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
如源码所示,如果上述扩展点没有return,那么就会进入到doCreateBean方法

深入源码理解SpringBean生命周期

首先是对Bean进行实例化,其中包括了构造器推断等,本文不过多聊这块内容,最后会返回BeanWrapper包裹的Bean实例。

深入源码理解SpringBean生命周期

元信息收集

实例化之后Spring通过回调MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName)对一些元信息做了收集维护处理,如@Autowire、@Resource、@PostConstruct 和 @PreDestroy等,为后续属性注入做准备。

深入源码理解SpringBean生命周期

MergedBeanDefinitionPostProcessor的实现类

深入源码理解SpringBean生命周期

MergedBeanDefinitionPostProcessor回调

深入源码理解SpringBean生命周期

初始化

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysdzw.html