Spring 技术内幕(读书笔记)

IoC概述

IoC

依赖倒置原则:抽象不依赖具体的细节

  • 控制反转也被成为依赖注入
  • 亦被成为依赖倒置原理
  • 是Spring框架的核心
  • 反转指的是责任的反转

使用场景

用于解耦组件之间复杂关系

在Spring中,Spring IoC提供了基本的JavaBean容器,通过IoC来管理组件之间的关系,并且通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象赋予事务管理、生命周期管理等基本功能。


IoC容器的设计与实现

  • BeanFactory 简单容器,提供基本功能
  • ApplicationContext应用上下文,在容简单器的基础上,增加了面向框架的特征,同时对应用环境做了适配

Spring的IoC容器系列

我们通常所说的IoC容器,实际上代表着一系列功能各异的容器产品。

以水桶为例,在商店中出售的水桶有大有小,制作材料各不相同,金属的、塑料的各式各样,但是只要能够装水,具有水桶的特性就可以当做水桶来卖。

Spring的IoC容器系列概况

就像商品需要有产品规格说明一样,同样,作为IoC容器,也需要为它的具体实现指定基本的功能规范,具体表现为BeanFactory,它体现了Spring为提供给用户使用IoC容器所设的基本功能规范。

如果使用的IoC容器看成一个水桶,那么BeanFactory就定义了水桶的基本功能,比如至少能装水,有个提手等。除了满足基本的功能,为了不同场合的需要,水桶厂商还为用户提供了其他多做多样的水桶产品,以满足不同用户的需求。但是不管是什么水桶,它们都有最基本的功能:装水。

  • 对于Spring的IoC容器来说,它的基本功能是什么呢?它需要满足BeanFactory这个基本的接口定义。

  • Spring通过BeanDefinition来管理基于Spring的对象之间的依赖。

  • IoC容器是用来管理对象依赖关系的,对IoC容器来说BeanDefinition就是依赖反转所管理的对象依赖关系的抽象

  • BeanDefinition是容器实现依赖反转功能的核心数据结构。

BeanDefinition就像是水桶里的水

Spring IoC容器的设计

IoC容器的接口设计图

BeanFactory的应用场景

BeanFactory只是一个接口类,并没有给出容器的具体实现,而BeanFactory具有多种实现类,比如DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等都可以看成是容器附加了某种功能的具体实现,也就是容器体系中的具体容器产品。
BeanFactory接口设计了getBean方法,这个方法是使用IoC容器API的主要方法,通过这个方法,可以取得IoC容器中管理的Bean。
有了BeanFactory的定义,用户可以执行以下操作:

  • 通过接口方法containsBean让用户能够判断容器是否含有指定名字的Bean。
  • 通过接口的方法isSingleton来查询指定名字的Bean是否是Singleton类型的Bean。对于Singleton的属性,用户可以在BeanDefinition中指定。
  • 通过接口方法isPrototype来查询指定名字的Bean是否是prototype类型的。与Singleton属性一样,这个属性也可以由用户在BeanDefinition中指定。
  • 通过接口方法isTypeMatch来查询指定了名字的Bean的Class类型是否是特定的Class类型。这个Class类型可以有用户来指定。
  • 通过接口的方法getType来查询指定名字的Bean的Class类型。
  • 通过接口方法getAliases来查询指定了名字的Bean的所有别名,这些别名都是用户在BeanDefinition中定义的。


    BeanFactory

你可能感兴趣的:(Spring 技术内幕(读书笔记))