Spring IOC 源码解析(六) XmlBeanFactory

一.前言

现在我们把主要的类讲了一部分,下面我们来看看 Spring 是如何启动的.

DefaultListableBeanFactory 作为一个默认的功能完整的 IOC 容器来使用.那我们就从它来入手.

二. XmlBeanFactory

2.1 描述

XmlBeanFactory 是 DefaultListableBeanFactory 唯一的子类(已有 @Deprecated 注解), Spring 提示我们现在不建议使用这个类了,后面的版本中可能删除了.但是作为元老级别 IOC 容器,我们还是从这个实现类来跟踪,还可以方便我们后期对 ApplicationContext (应用上下文,容器高级封装) 和 BeanFactory 做对比.看看 ApplicationContext 到底是怎么高级的.

XmlBeanFactory 在继承了 DefaultListableBeanFactory 容器的功能的同时.增加了一部分功能,很容易从 XmlBeanFactory 的名字上猜到,它是一个 xml 相关的 BeanFactory ,也就是说他是一个可以读取以 xml 文件方式定义的 BeanDefinition 的 IOC 容器.

2.2 IOC 容器中的 Bean

我们知道 IOC 容器中存放着我们注册的 bean,但是 bean 是如果注册到 ioc 容器的呢? 这里我们就从本文所要演示的 XMLBeanFactory 来说起.我们在很早以前使用 spring 的时候,大多数使用的 xml 的形式定义 bean(即 <bean> 标签).

既然是 xml 的形式定义 bean ,那么 spring 是如果定位 xml ,又是如何加载, 如何解析,如何注册到 IOC 中,最后如何实例化成我们需要的 bean 呢?

这就是我们后面要研究的问题了.

2.3 IOC 容器启动步骤

首先看一张图:
在这里插入图片描述

图中描述了 IOC 容器启动的步骤,简单描述就是

  1. 资源定位
  2. 资源载入
  3. 资源注册

注册完毕后,一个完整的 BeanFactory 就创建完毕,然后就是使用容器中的对象.

注意要点:

ioc 容器初始化过程中,一般不包含 Bean 依赖注入的实现, 在 spring ioc 的设计中,Bean 定义的载入和依赖注入是两个独立的过程. 依赖注入一般发生在应用第一次通过 getBean 向容器索取 Bean 的时候.

但有一个例外值得注意, 在使用 ioc 容器时有一个预实例化的配置,通过这个预实例化的配置(lazyinit) ,从而改变这个被设置了 lazyinit 属性的 bean 的注入过程,

举例说明,如果我们对某个 Bean 设置了 lazyinit 属性,那么这个 bean 的依赖注入在 ioc 容器初始化时就预先完成了,而不需要等到整个初始化完成以后,第一次使用 getBean 时才会触发.

Spring IOC 源码解析(七) BeanDefinition 的注册

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值