这里主要对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

笔记截图:

spring源码系列(二):IOC接口设计分析的更多相关文章

  1. Spring源码系列(二)--bean组件的源码分析

    简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文 ...

  2. Spring源码系列(三)--spring-aop的基础组件、架构和使用

    简介 前面已经讲完 spring-bean( 详见Spring ),这篇博客开始攻克 Spring 的另一个重要模块--spring-aop. spring-aop 可以实现动态代理(底层是使用 JD ...

  3. Spring源码系列(四)--spring-aop是如何设计的

    简介 spring-aop 用于生成动态代理类(底层是使用 JDK 动态代理或 cglib 来生成代理类),搭配 spring-bean 一起使用,可以使 AOP 更加解耦.方便.在实际项目中,spr ...

  4. Spring源码分析之IOC的三种常见用法及源码实现(二)

    Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...

  5. Ioc容器BeanPostProcessor-Spring 源码系列(3)

    Ioc容器BeanPostProcessor-Spring 源码系列(3) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Io ...

  6. Ioc容器依赖注入-Spring 源码系列(2)

    Ioc容器依赖注入-Spring 源码系列(2) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器BeanPostPr ...

  7. 【spring源码分析】IOC容器初始化(二)

    前言:在[spring源码分析]IOC容器初始化(一)文末中已经提出loadBeanDefinitions(DefaultListableBeanFactory)的重要性,本文将以此为切入点继续分析. ...

  8. Ioc容器beanDefinition-Spring 源码系列(1)

    Ioc容器beanDefinition-Spring 源码系列(1) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Ioc容器 ...

  9. 【spring源码分析】IOC容器初始化——查漏补缺(二)

    前言:在[spring源码分析]IOC容器初始化(八)中多次提到了前置处理与后置处理,本篇文章针对此问题进行分析.Spring对前置处理或后置处理主要通过BeanPostProcessor进行实现. ...

随机推荐

  1. 解析crash

    命令行 1.查找 symbolicatecrash find /Applications/Xcode.app -name symbolicatecrash -type f 2.此时会出现一个路径 sy ...

  2. Vue-cli2.0

    本文的学习来自技术胖大神的教程:https://jspang.com/ Vue-cli是vue官方出品的快速构建单页应用的脚手架 开发一个项目,在开始的时候,会构建项目结构.webpack.怎么运行. ...

  3. 【汇编】AX内容依次倒排序

    ;P99,5.13,ax内容倒序 ;思路,ax左移一位最高位进cf里,bx右移一位把cf里值进bx的最高位, ;循环16次即实现ax16位内容倒序存储在bx中 DATA SEGMENT DATA EN ...

  4. Java事务失效

    问题复现,用伪代码复现问题! 事务配置文件 <tx:advice id="txAdvice" transaction-manager="transactionMan ...

  5. Maven聚合工程安装时排除掉不参与本次安装的子工程

    为解决本人在练习项目时的实际需求而做此记录: 在练习SSM项目时,通过Maven的聚合工程搭建了几个module,通过 health_parent 父工程进行管理,内有 healthmobile_we ...

  6. rabbitmq系列(一)初识rabbitmq

    为什么要使用消息中间件 案例:假如我们开发了一个商品抢购网站.这个网站的目的就是在某一时间点进行抢购商品,同时要求用户注册,在注册的时候会同时给用户电话和邮箱中发送验证码,以便完成信息注册.传统做法应 ...

  7. UGUI之MaskableGraphic

    MaskableGraphic继承自Graphic,并且继承了IClippable, IMaskable, IMaterialModifier三个接口.它是RawImage.Image和Text的父类 ...

  8. 原生javascript 基础动画原理

    一.实现原理: 1.开定时器前先清除定时器 2.设置定时器 3.当前元素的位置 + 每一步的长度 4.当元素当前位置超过目标点时,把当前位置==目标点 5.设置元素位置,开始运动 6.判断当前位置如果 ...

  9. java接入钉钉机器人(带源码)

    前言 登录钉钉网页: https://im.dingtalk.com 登录说明文档地址,以备随时查询: https://ding-doc.dingtalk.com/doc#/serverapi2/qf ...

  10. excel 转换成pdf 总结

    excl 转换成pdf 1.freespire   只能转换前三页 // 使用此组件 只能转换前3页 //需要引用 如下命名空间 //using Spire.Doc; //Document doc = ...