Spring创建Bean过程简要总结

        经过了前面两个大篇幅的对spring源码的大致梳理,大致上可以总结出spring创建bean的一些关键逻辑。本文是对之前文章的一个简要的总结,并不是spring创建bean的完整过程,我大致梳理流程如下:

  • 创建ClassPathXmlApplicationContext对象,传入spring配置文件
  • 在ClassPathXmlApplicationContext的构造方法中调用refresh()方法
  • refresh()方法中有两个重要步骤,
    • 一个是创建BeanFactory的逻辑,调用obtainFreshBeanFactory()方法,
    • 一个是创建bean的方法finishBeanFactoryInitialization()方法
  • 在创建beanFactory的过程中,有两个步骤:
    • 创建容器BeanFactory
    • 读取并解析配置文件中的bean定义信息,并将bean定义信息存储在beanDefinition对象中,并以beanName作为Key,BeanDefinition最为value保存在beanDefinitionMap中,并且将beanName保存在beanDefinitionNames的list集合中
  • 执行完obtainFreshBeanFactory()后,还会进行一些bean实例化前的步骤,例如对BeanFactory进行一些属性初始化等等操作
  • 前置方法结束后,进行bean的创建逻辑,创建是调用finishBeanFactoryInitialization()方法
  • 创建过程中,首先是循环beanDefinitionNames集合
  • 根据bean查询beanDefinition,并将beanDefinition转化为RootBeanDefinition对象
  • 然后调用getBean方法,getBean方法中调用doGetBean方法
  • doGetBean方法中调用getSingleton()方法获取bean对象
    • 先会在singletonObjects的map集合中获取,如果获取不到,调用ObjectFactory的createBean()方法
  • createBean方法中,根据RootBeanDefinition对象中的信息,得到字节码对象Clas。然后根据字节码对象得到构造器对象
  • 通过BeanUtils的instantiateClass()方法通过反射来创建对应的bean对象

以上的流程就是这几天看spring源码后,对spring创建流程的一个总结,欢迎大神指点!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值