Bean生命周期和九次调用BeanPostProcessor都做了什么事情

准备工作

  • 使用的是Spring5.0的源码
  • 准备一个BeanTest的测试类
    在这里插入图片描述

启动Spring

  • refresh()方法是Spring的启动方法,我们启动它
    在这里插入图片描述

refresh()

  • BeanPostProcessor会在registerBeanPostProcessors(beanFactory)注册到工厂中去
  • 我们主要看finishBeanFactoryInitialization(beanFactory)方法,这个方法是用来实例化非懒加载的Bean
    在这里插入图片描述

finishBeanFactoryInitialization(beanFactory)

  • 下边这个方法是真正开始实例化Bean
    在这里插入图片描述

preInstantiateSingletons()

  • 这个方法就是首先将所有的BeanName放入集合,然后遍历通过getBean(beanName)这个方法来获取Bean,因为我的BeanTest不是FactoryBean所以走下边的getBean(beanName)
    在这里插入图片描述
  • 进入getBean后是一个doGetBean方法然后再点进去
    在这里插入图片描述
  • 代码太多就直接找到关键方法吧,就是调用getSingleton()然后传入了beanName和一个Lambda表达式,我们进去看这个getSingleton()方法
    在这里插入图片描述
  • 加锁然后在单例池中再次get,防止被创建过,如果没有则进入创建流程通过getObject()调用Lambda表达式开始创建对象,然后上个方法进入createBean(beanName, mbd, args)
    在这里插入图片描述

createBean(beanName, mbd, args)

  • 首先找到这个方法,这是第一次调用BeanPostProcessor
    在这里插入图片描述
<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值