spring-容器工厂实例化流程(一)

本文详细介绍了Spring框架中Bean的初始化过程,包括资源加载、BeanDefinition的解析、AbstractBeanFactory的作用及其实例化Bean的具体步骤。

1.Source

spring 初始化最先获得熟悉资源如url,url,file,

2.beanDefinition

通过解析source文件获得BeanDefinition,其中根节点的对象是RootBeanDefinition。

3.AbstractBeanFactory

1.获得RootBeanDefinition后通过AbstractBeanFactory实例化文件
2.解析RootBeanDefinition的属性时,需要使用到PropertyEditor属性编辑器。
3.getBean方法
4.先通过name获得BeanName
5.然后检查singleton是否有bean实例已经生成
  ● DefaultSingletonBeanRegistry 实例化singletonbean的工厂
  ● 先从singletonObjects中查找是否有已经实例化的bean有则返回
  ● 没有在加载则查看是否正在加载中。
  ● 如果是正在加载中,则看是否已经提前曝光
  ● 如果没有提前曝光,则判定是否可以提前曝光
  ● 如果可以提前曝光则去获取当前beanName的factory。
  ● 如果factory存在则提前曝光当前bean,然后移除这个工厂。
6.如果检查有实例返回
  ● 则检查是不是factoryBean
  ● 如果是普通bean实例则直接返回对象
  ● 如果是factoryBean, 则去查找当前eanName的RootBeanDefinition,获取synthetic属性后去创建实例
  ● 如果创建的是单列
  ● 先从缓存获取当前实例。
      ○ 如果没有缓存则直接获取factoryBean.getObject()
      ○ 返回实例    
7.如果没有实例返回
  ● 如果是在一个循环引用中又引用到了自己,则抛出异常
  ● 检查是否有parentBeanFactory,如果有而且也包含beanName的BeanDefinition 则在parentBeanFactory中获得实例
  ● 如果没有parentBeanFactory,则依次判定是否是singleton,prototype,scope;
  ● 根据类型创建完实例以后,再检查创建的实例是否和要创建的类有区别。
  ● 最后返回bean实例。

转载于:https://www.cnblogs.com/a337928/p/7763920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值