美文网首页
《spring技术内幕》系列二之ioc容器创建

《spring技术内幕》系列二之ioc容器创建

作者: 仙境源地 | 来源:发表于2018-10-24 09:23 被阅读0次

    我们可以认为直接的BeanFactory实现是IoC容器的基本形式,而各种ApplicationContext的实现是IoC容器的高级表现形式。关于ApplicationContext的分析,以及它与BeanFactory相比的增强特性都会在下面进行详细的分析。

    就先拿一个直接的XmlBeanFactory实现来熟悉

    容器继承体系

    这是一个功能完备的ioc容器,名字里透露出来的信息就知道它可以从xml文件中解析BeanDefinition,继承自DefaultListableBeanFactory,

    xml文件中定义的具体BeanDefinition信息如何解析呢,当然是交给一个专业的xml处理器XmlBeanDefini-tionReader类处理啦

    那么问题来了,既然需要xml文件,那么如何知道来源呢?spring提供了一个工具类Resource类来分装io操作,常见的实现有我们熟悉的ClassPathResource类。作为XmlBeanFactory的一个构造参数传入进来,这样子信息源就有了,下面就开始解析这个信息源吧


    ClassPathResource res = new ClassPathResource("beans.xml");


    《spring技术内幕》系列二之ioc容器创建

    参考XmlBeanFactory实现,可以直接利用基类DefaultListableBeanFactory加载xml文件的基本过程

    代码清单2-3编程式使用IoC容器


    ClassPathResource res = new ClassPathResource("beans.xml");

    DefaultListableBeanFactory

        factory = new DefaultListableBeanFactory();

    XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);

    reader.loadBeanDefinitions(res);


    通过factory对象来使用DefaultListableBeanFactory这个IoC容器了。创建IoC容器大概需要如下几个步骤:

    1)创建IoC配置文件的抽象资源,这个抽象资源包含了BeanDefinition的定义信息。

    2)创建一个BeanFactory,这里使用DefaultListableBeanFactory。

    3)创建一个载入BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。

    4)从定义好的资源位置读入配置信息,具体的解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册Bean定义之后,需要的IoC容器就建立起来了。这个时候IoC容器就可以直接使用了。

    2.2.3 ApplicationContext容器的特点

    我们开发过程中最常用的ApplicationContext容器除了提供ioc容器的基本功能之外,还提供了一系列扩展功能

    《spring技术内幕》系列二之ioc容器创建

    正因为提供了这么多附加功能,一般建议在开发应用时使用ApplicationContext作为IoC容器的基本形式。

    TODO:列出相对于简单ioc容器提供的附加功能

    1.支持不同的信息源,通过扩展MessageSource接口,支持国际化功能

    2.支持多资源访问。通过扩展ResourceLoader和Resource接口,支持从不同资源获取BeanDefinition信息。

    3.支持应用事件(这很重要)。通过实现ApplicationEventPublisher接口,这样在上下文中引入了事件机制。这些事件和Bean的生命周期的结合为Bean的管理提供了便利。

    4.ApplicationContext本身类提供的附加功能。

    相关文章

      网友评论

          本文标题:《spring技术内幕》系列二之ioc容器创建

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