Spring Bean生命周期笔记

refresh()

1.获取Bean Factory

2.初始化BeanFactory

3.调用invokeBeanFactoryPostProcesser:解析配置类,创建BeanDefinition;执行各种BeanFactoryPostProcessor接口的postProcessBeanFactory(beanFactory)方法

4.调用registerBeanPostProcessors方法:注册Bean的后置处理器

5.调用finishBeanFactoryInitialization方法:完成Bean的实例化和初始化

5.1调用getSingleton(beanName)判断单例池中是否有这个Bean

5.2判断是否有@DependsOn注解,有则首先实例和初始化依赖Bean

5.3调用getSingleton(String beanName, ObjectFactory<?> singletonFactory)方法

5.3.1调用singletonFactory.getObject()方法,即createBean方法

5.3.1.1实例化指定bean之前先调用InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation方法,如果返回Bean则直接返回,否则调用doCreateBean方法

5.3.1.1.1调用doCreateBean方法

5.3.1.1.1.1调用createBeanInstance方法实例化Bean

5.3.1.1.1.2调用MergedBeanDefinitionPostProcess接口的PostProcessMergedBeanDefinition方法,其中一个实现类CommonAnnotationBeanPostProcessor的PostProcessMergedBeanDefinition方法将类中以@PostConstruct和@PreDestroy标注的方法找出并分别放入集合中

5.3.1.1.1.3调用populateBean方法完成自动装配

5.3.1.1.1.4调用initializedBean方法

5.3.1.1.1.4.1调用invokeAwareMethod方法,调用各种实现Aware接口的方法,包括BeanNameAware、BeanFactoryAware和BeanClassLoaderAware接口

5.3.1.1.1.4.2调用applyBeanPostProcessorsBeforeInitialization方法调用各种BeanPostProcessor接口的postProcessBeforeInitialization(Object bean, String beanName)方法,其中包括CommonAnnotationBeanPostProcessor的postProcessBeforeInitialization(方法由父类InitDestroyAnnotationBeanPostProcessor实现)方法,这里用来执行之前找到的以@PostConstruct标注的方法;还有ApplicationContextAwareProcessor,在postProcessBeforeInitialization方法中调用了ApplicationContextAware的setApplicationContext方法

5.3.1.1.1.4.3调用invokeInitMethods方法,如果当前bean实现了InitializingBean接口则调用afterPropertiesSet()方法;
如果bean有init-method方法(即在xml配置bean时,init-method所指定的方法),则执行该方法

5.3.1.1.1.4.4调用applyBeanPostProcessorsAfterInitialization,执行各种BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法

5.3.1.1.1.5调用registerDisposableBeanIfNecessary(String beanName, Object bean, RootBeanDefinition mbd)方法,判断如果bean实现了DisposableBean接口,则将bean注册到销毁回调bean集合中

5.3.2调用addSingleton(beanName, singletonObject)方法,将刚创建好的bean放入单例池中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值