Spring源码

在这里插入图片描述
大致流程:Spring 启动时读取应用程序提供的 Bean 配置信息,并在 Spring 容器中生成一份相应的Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准备就绪的运行环境。

1.Spring 中 IOC 容器分类

Spring 中有两个主要的容器系列:

1)实现 BeanFactory 接口的简单容器;

2)实现 ApplicationContext 接口的高级容器。

在这里插入图片描述
在这里插入图片描述
refresh方法是整个Spring容器的入口 点去进
在这里插入图片描述

在这里插入图片描述

上面红色标注的是refresh中比较重要的方法obtainFreshBeanFactory 创建bean工厂 如果存在则销毁 不存在则创建

在这里插入图片描述
在这里插入图片描述

if判断是否已经存在容器,如果存在则销毁,创建一个新的容器
在这里插入图片描述

在这里插入图片描述

DefaultListableBeanFactory中的beanDefinitionMap 上图已经标注出来了 其实就是前面一开始提到的bean的注册表,现在还是空的,在解析配置文件的时候才会有值:

DefaultListableBeanFactory 是BeanFactory 子类,它包含了基本 Spirng IoC容器所具有的重要功能,开发时不论是使用 BeanFactory 系列还是 ApplicationContext 系列来创建容器基本都会使用到 DefaultListableBeanFactory 类,可以这么说,在 spring 中实际上把它当成默认的 IoC 容器来使用

第一步已经执行完毕 ,下面需要加载配置文件 将刚刚创建的DefaultListableBeanFactory 对象传入作为参数

在这里插入图片描述

首先创建一个解析器 并完成初始化

在这里插入图片描述

第一个是走我们自定义的 资源,第二个是走容器自身资源 ,所以会走第二个
在这里插入图片描述

做一个location做一个遍历,这个location其实就是我们传过来的配置文件,每循坏一次又调用leadBeanDefinition
在这里插入图片描述

在这里插入图片描述
将IO流传到inputSource里面 spring用的这种方式解析的xml文件
在这里插入图片描述
创建document对象
在这里插入图片描述
** documentReader.registerBeanDefinitions(doc, this.createReaderContext(resource))会取到根节点**
在这里插入图片描述
在这里插入图片描述
preProcessXml 解析前缀
parseBeanDefinitions解析标签
postProcessXml解析后缀
在这里插入图片描述
**开始解析XML文件 **
在这里插入图片描述
如果标签是bean 会执行processBeanDefinition
在这里插入图片描述
**BeanDefinitionHolder 可以理解为对解析出来的结果的定义,并且能够完成将解析出来的结果注册到Spring容器中
在这里插入图片描述
得到bean的名字
在这里插入图片描述
**判断容器中是否存在bean对象
在这里插入图片描述
将结果放入容器中 beanDefinitionMap,但是现在只是完成了注册并没有完成实例化
在这里插入图片描述
回到入口
在这里插入图片描述

在这里插入图片描述

如果不是懒加载,就会创建实例化bean,从之前存入的集合中取出需要被实例化的bean对象的名字在这里插入图片描述

在这里插入图片描述
到这里我们的Spring容器初始化bean完成 ,第一次学习Spring源码 仅记录学习过程!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值