• Spring源码由浅入深系列二 类结构


    BeanFactory

            上一章中,我们提过Spring的依赖注入容器是BeanFactory。BeanFactory是一个基础接口,它有一个默认实现类:DefaultListableBeanFactory。我们可以由它为出发点看看Spring的类层次结构。如下图所示:

            上图中,有一个值得我们学习的设计方法。DefaultListableBeanFactory类实现了ConfigurableListableBeanFactory接口。然后ConfigurableListableBeanFactory继承了接口ListableBeanFactory、AutowireCapableBeanFactory、ConfigurableBeanFactory三个接口。但是DefaultListableBeanFactory类只专注实现ListableBeanFactory接口,其它的实现交给它的继承父类AbstractAutowireCapableBeanFactory。这样的设计思路在Spring代码类中随处可见。
            从图中我们可以看到BeanFactory有三个直接子接口: AutowireCapableBeanFactory、HierarchicalBeanFactory、ListableBeanFactory。如下图:

    ApplicationContext

            上面整个是BeanFactory部分的类层次结构。但是我们在使用Spring的过程中,经常接触的是ApplicationContext。ApplicationContext是由BeanFactory派生而来,除具有BeanFactory的所有功能之外,还具有资源访问、国际化处理、强大的事件机制。
            在这里着重介绍一下ApplicationContext的事件机制。它是通过ApplicationEvent和ApplicationListner这两个接口来提供的。当ApplicationContext中发布一个事件时,所有扩展ApplicatonListener的Bean都将会接受这个事件,并进行相应的处理。
    Spring提供了部分内置事件,主要有以下几种:
            ContextRefreshedEvent:ApplicationContext发送该事件时,表示该容器中所有的Bean都已经被装载完成,此ApplicationContext已就绪可用。
            ContextStartedEvent:生命周期beans的启动信号
            ContextStoppedEvent:生命周期beans的停止信号
            ContextClosedEvent:ApplicationContext关闭事件,则context不能刷新和重启,从而所有的singleton bean全部销毁。

            好了,还是让我们来看看ApplicationContext的类层次结构,如下图所示:


            从图中可以看出,ApplicationContext采用继承结构,每层完成特定的工作。通过源码可以知道,Spring启动ApplicationContext容器的主要逻辑放在AbstractApplictionContext类的refresh方法中。Refresh方法应该是我们理解代码的大纲及难点。
            请仔细查看并认真记忆以上两个UML图,在下一章,我准备剖析重点剖析refresh方法。
     
    0
  • 相关阅读:
    Can we call an undeclared function in C++?
    Template Metaprogramming in C++
    Templates and Default Arguments
    Templates and Static variables in C++
    Default Assignment Operator and References
    Advanced C++ | Conversion Operators
    Use of explicit keyword in C++
    When should we write our own assignment operator in C++?
    Copy constructor vs assignment operator in C++
    VMWare关闭beep声
  • 原文地址:https://www.cnblogs.com/writeLessDoMore/p/6939410.html
Copyright © 2020-2023  润新知