Spring-IOC开篇案例分析(2)2018-07-29

    从Spring-IOC(1)中我们描述一个简单的IOC流程,其间我们涉及到的关键类:DefaultListableBeanFactory、XmlBeanDefinitionReader。那么今天我们就从这两个类下手,慢慢的去理解spring ioc。

一、我们来观察下DefaultListableBeanFactory的继承体系:

从继承的体系来分析,DefaultListableBeanFactory拥有继续体系的有三个制高点类的基本功能及其部分的扩展功能。

   a、BeanFactory就是生产Bean的工厂,是spring IOC的基本容器,提供完整的IoC服务支持。BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是从上图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。

其接口定义如下:

b、*Registry这一类接口是Spring框架提供的一个用于注册的接口。

SingletonBeanRegistry:Spring框架提供的一个用于注册单例的Bean的注册接口,实现该接口的类可以方便对单例Bean进行管理。

AliasRegistry:用于管理Bean别名的通用接口。

BeanDefinitionRegistry该类的作用主要是注册 BeanDefinition 实例,完成注册的过程。

这里我们关注下BeanDefinition:我们知道SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系,Bean对象在Spring实现中是以BeanDefinition来描述的;

二、在开看下XmlBeanDefinitionReader的继承体系


从继承体系我们可以看出XmlBeanDefinitionReader拥有以下两个功能模块:

EnvironmentCapable:此接口的类有应该有一个Environment类型的域,并且可以通过getEnvironment方法取得。

BeanDefinitionReader:该接口的作用就是加载 Bean。

        以上是我们针对Spring-IOC(1)案例中涉及到的关键类的功能上的解析。在此我们提下spring中的另外一个非常重要的容器:ApplicationContext

ApplicationContext:ApplicationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,除了拥有BeanFactory的所有支持,ApplicationContext还提供了其他高级特性,比如事件发布、国际化信息支持等。

这里我们在此查看下ApplicationContext的继承关系:

其中设计到功能模块有:BeanFactory 基本容器功能、MessageSource国际化持、ApplicationContext事件的发部、ResourceLoader统一资源加载策。




“知其然,知其所以然”


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.1 Spring IoC容器和bean简介 本章介绍了Spring Framework实现的控制反转(IoC)...
    起名真是难阅读 7,391评论 0 8
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 11,702评论 2 22
  • spring源码分析(二) 目录五、Spring 源码解读--5.1、什么是IOC/DI--5.2、Spring ...
    毛子果阅读 3,106评论 0 0
  • 严格说来,长沙只是我生活了十年的城市,而且我对这里的感觉并不是那么好。 长沙是怎样的呢?夜生活丰富,吃货的城市,长...
    晨宝要瘦瘦瘦阅读 2,498评论 1 1
  • 数据化逐步渗透进人类社会中,并与人类社会规律相辅相成。如今,社交软件把我们放在一张大型的网上,以此方式发现并利用人...
    XJasmine阅读 2,642评论 0 2