Spring 入门学习 —— Spring IOC 容器BeanFactory(三)(BeanFactory 的对象注册和依赖绑定的方法)

70 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

上一篇文章我们以上帝视角大概介绍了一下BeanFactory 的对象注册和依赖绑定的实现的几种方式,从这篇文章开始我们对这几种方式做一个细致的介绍。

从前文我们知道,BeanFactory 本质是一个IOC Service Provider,而IOC Service Provider 有两个作用:

  • 明确管理各个业务对象
  • 明确管理各个业务对象之间的依赖关系

为了实现这两个功能,我们需要寻找某种途径来记录和管理这些信息。

首先介绍“直接编码方式”

直接编码方式

我们首先要明确一个概念,BeanFactory 只是提供了一堆借口,我们最终是需要一个改接口的实现类来完成上面所说的那两个功能的。而DefaultListableBeanFactory 就是一个最常用的实现。

对于DefaultListableBeanFactory,不仅实现了BeanFactory 接口,还实现了BeanDefinitionRegistry 接口,这个接口才是在BeanFactory 的实现中担当Bean 注册管理的角色。

基本来说,BeanFactory 接口只定义如何访问容器内管理的Bean 的方法,各个BeanFactory 的具体实现(如DefaultListableBeanFactory)负责具体的Bean 的注册以及管理工作。

BeanDefinitionRegistry 接口定义了Bean 的注册逻辑。通常情况,BeanFactory 的某些具体实现类也会实现这个接口,来管理Bean 的注册

BeanFactory 和BeanDefinitionRegistry 的关系,就好比图书馆和书架。客户端就相当于你自己。

在你借书的时候,你是和图书馆打交道的,图书馆(BeanFactory)负责给你想要的书籍;但是书架(BeanDefinitionRegistry)才是一个真正存放并决定书籍摆放位置的存在。

对于每一个被“管理”的对象,在容器中都有一个BeanDefinition实例与之对应,用来保存对象所有必要的信息。当客户端向BeanFactory 请求的时候,BeanFactory 会使用这些信息为客户端返回一个完备可用的对象实例。

总结

这篇文章介绍的是通过编码方式进行BeanFactory 的对象注册和依赖绑定的方法。接下来会介绍另外的几种方法。