zoukankan      html  css  js  c++  java
  • spring源码系列(二):IOC接口设计分析

    这里主要对springIOC接口体系进行简单的概述和分析,具体每个接口详细分析在下面目录:

    参考内容: <Spring技术内幕:深入解析 Spring架构与设计原理> 和 <Spring源码深度解析(第2版)>

    源码查看工具: idea,spring版本5.2.0

    一 主要接口设计图

    idea查看接口关系图,可在图中删除新增画出自定义的关系图,使用del和查看实现类快捷键(ctrl+alt+b)点击即可删除和增加类图

     

    二 第一条线

    通过BeacFactory->HierarchicalBeanFactory->ConfigurableBeanFactory接口功能的叠加,定义了Bean容器基本的功能

    1 BeacFactory定义了基本的IOC容器规范,包括getBean,判断Bean是否单例等方法,接口方法有

    2 HierarchicalBeanFactory增加了获取父容器等方法,使容器具备双亲Ioc的功能,alt+7 查看当前接口的所有方法

     (双亲容器: 容器可以与另一个容器进行父子容器关联。

    这个时候子容器就可以引用父容器中的bean,但是父容器是不能够引用子容器中的bean的,并且各个子容器中定义的bean是互不可见的,

    这样也可以避免因为不同的插件定义了相同的bean而带来的麻烦。)

    3 ConfigurableBeanFactory再增加了设置父容器,设置Bean后置处理器等对Bean的配置,同时继承了SingletonBeanRegistry接口,扩展了注册访问单例Bean的功能

    三 第二条线

    这条线以ApplicationContext接口为核心的接口设计,开发中最常用的容器就是ApplicationContext的实现,在基本容器基础上增加了许多高级特性

    1 ListableBeanFactory接口细化了许多获取Bean功能,比如获取Bean名字和数量,获取同一个class的Bean集合等

     比如以下方法:

    2 ApplicationContext主要增加了一些关于容器本身的一些方法,并且applicationContext通过实现

    MessageSource,  ResourceLoader, ApplicationEventPublisher添加了许多高级容器支持:

     

     3 WebApplicationContext实现了ApplicationContext接口,通常在Web环境中使用

     4 ConfigurableApplicatoinContext也是ApplicationdContext的实现,

       作用就是设置上下文 ID,设置父应用上下文,添加监听器,刷新容器,关闭,判断是否活跃等方法,application只定义了getId等方法

       所以setId方法在子接口中定义,

    refresh()方法也在这个接口中定义,IOC容器启动的主要逻辑基本都在这个方法里面,由他的实现抽象类

    AbstractApplicationContext实现具体逻辑,通过封装在父抽象类中,子类容器可以直接调用,因为大部分容器初始化逻辑都是一样的,所以子容器只需要关注自身特性即可

    四 核心接口详细分析

    BeanFactory

    ConfigurableBeanFactory

    ApplicationContext

    MessageSource

    ListableBeanFactory

    ResourceLoader

    ApplicationEventPublisher

    AutowireCapableBeanFactory

    Environment

    ConfigurableApplicationContext

    WebApplicationContext

    五 核心容器类详细分析

    1 AbstractApplicationContext

    六 特定场景详细分析

    1 IOC容器启动初始化过程分析

    2 解析XML文件过程分析

    七 广告

    最后打个广告,个人整理的所有源码xmind笔记和一些测试代码,在我的码云上面:

    https://gitee.com/houzheng1216/sourcecode

    笔记截图:

  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/houzheng/p/11801732.html
Copyright © 2011-2022 走看看