美文网首页
Bean的创建、注册以及获取

Bean的创建、注册以及获取

作者: zhrowable | 来源:发表于2017-05-16 01:59 被阅读0次

    [TOC]

    Bean的创建、注册以及获取

    前言:

    1.Spring基于XML配置bean和基于编程式(@Bean)配置bean的创建前解析工作有点不一样,本文将会分开讲解;
    2.在展开bean的创建过程之前,先列举一下Spring的bean创建过程(其实不仅仅包括创建过程,还有注册、扩展等操作,下文简单称为bean创建过程)需要到的核心类。

    准备阶段

    先简单介绍一下Spring基于XML文件的bean创建过程中使用到的核心类,主要包括三个部分:

    1.容器加载的相关类(BeanFactory体系)

    beanFactory_relations.png

    下面逐层介绍一下上图BeanFactory体系中涉及到的所有接口和类:

    • AliasRegistry: 定义对alias(别名)的简单增删查等操作。

    • SimpleAliasRegistry: ** 主要使用map(ConcurrentHashMap**)作为alias的缓存,并且实现AliasRegistry接口。

    • **SingletonBeanRegistry: **定义对单例的注册和获取。

    • **BeanFactory: ** 接口定义了基本的IoC容器的规范,如获取bean和获取判断bean全局范围类型等。

    • **DefaultSingletonBeanRegistry: ** 对SingletonBeanRegistry接口的实现,里面有多个集合类型的容器用于判断或者存储单例bean或者用于bean创建过程时的各种判断(常听说的Spring单例缓存池就在这里)。

    • **HierarchicalBeanFactory: ** 它主要是提供父 BeanFactory 的功能,通过它能够获取当前 BeanFactory 的父工厂( PS: 若在 A 工厂启动并加载 Bean 之前, B 工厂先启动并加载了,那 B 就是 A 的父工厂),这样就能让当前的 BeanFactory 加载父工厂加载的 Bean 了(和命名一致,使得BeanFactory得到层次化的功能)。

    • **ListableBeanFactory: **提供了列举 Bean 的功能,他能够列举当前 BeanFactory 加载的所有 Bean :列举所有 Bean 的名字或者满足某种类型的 Bean 的名字,根据类型返回所有 Bean 对象等。

    • **BeanDefinitionRegistry: ** 定义对BeanDefinition的注册、移除、查询等功能。

    • **FactoryBeanRegistrySupport: ** 在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能。

    • **ConfigurableBeanFactory: ** 提供了配置BeanFactory的多种方法,例如添加BeanClassLoader、设置ParentBeanFactory、添加BeanPostProcessor等等。

    • **AbstractBeanFactory: ** 综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能,有一点比较重要的是bean的大多数属性在这个BeanFactory里面缓存,例如PropertyEditor、BeanPostProcessor等。

    • **AutowireCapableBeanFactory: ** 定义创建bean、bean自动注入、初始化bean(资源和属性)、应用bean的后处理器等方法。

    • **AbstractAutowireCapableBeanFactory: ** 综合AbstractBeanFactory的功能并对AutowireCapableBeanFactory接口进行实现。

    • **ConfigurableListableBeanFactory: ** 提供了列举 Bean 的功能,添加指定忽略依赖、接口等。(继承自

      ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory三个接口,得到它们的所有功能)。

    • **DefaultListableBeanFactory : ** 整个体系最底层实现,综合了上面所有功能,主要是对Bean注册后的处理。一般来说,在一些钩子接口拿到的BeanFactory的实例通常都是DefaultListableBeanFactory 的实例。

    其实DefaultListableBeanFactory还有一个子类XmlBeanFactory,这个类是XML加载Bean的基础,但是不知道什么原因这个类在Spring 3.1版本已经废弃,而且注释里面写了废物的原因是"in favor of DefaultListableBeanFactory"(为了支持DefaultListableBeanFactory),具体原因不得而知,但是它仍然是Spring
    XML配置Bean的加载入口(DEBUG的时候断点可以放在this.reader.loadBeanDefinitions(resource))。

    2.配置文件读取操作相关类

    3.资源文件加载的相关类

    4.BeanDefinition的类族

    未完待续...
    Not end on 2017-5-17 1:56.
    Help yourselves!
    我是throwable,在广州奋斗,白天上班,晚上和双休不定时加班,晚上有空坚持写下博客。
    希望我的文章能够给你带来收获,共勉。

    相关文章

      网友评论

          本文标题:Bean的创建、注册以及获取

          本文链接:https://www.haomeiwen.com/subject/gqvkxxtx.html