Spring IoC 整体概览

130 阅读2分钟

IoC 介绍

上篇文章介绍了Spring源码编译的过程,接下来介绍Spring中的IOC容器的关联的核心类和加载流程。 Spring中两个最核心的就是IoC和AOP,这里先介绍IoC,那什么是IoC呢?

IOC(Inversion of Control 缩写为IoC),是面向对象编程中的一种设计原则,主要用来减少代码之间的耦合,可以叫做依赖注入(Dependency Injection 简称DI) 还有一种方式叫依赖查找(Dependency Lookup) 来源于维基百科

简单来说就是对象的创建的动作不需要自己手动进行创建,而是交给了第三方容器(例如Spring中的IoC容器)进行创建,并注入到当前对象中。

image-20211215165300990.png

Spring IoC 整体概览

我们都知道IOC容器里面主要管理着Bean,bean从普通的类,到IOC中需要经历那几个过程中

  1. bean的配置:通过xml文件或者注解的形式来表明当前类是要交给IOC管理的bean
  2. 加载配置:xml和注解加载配置方式不太一样,xml通过ClassPathXmlApplicationContext进行加载,注解则是通过AnnotationConfigApplicationContext,加载之后还需要读取配置 进行解析等操作,最终会把配置内容变成bean定义:BeanDefinition
  3. 注册:通过BeanDefinitionRegistry把生成的BeanDefinition注册到BeanFactory中(实际上注册到的是DefaultListableBeanFactory中的beanDefinitionMap里面)
  4. 生产bean:通过BeanFactory#getbean() 的时候会进行生产bean(实例化、属性填充、初始化,加入缓存中等步骤)

Spring IoC 核心概念和依赖关系

  • BeanFactory

    Spring的顶级核心接口,主要用于创建bean,使用的是典型的工厂模式,大概依赖关系图如下

image-20211215173417963.png

  • ApplicationContext

    继承了BeanFactory,也就是包含了BeanFactory所有功能,并在其基础上扩展了其他功能例如提供了注册管理BeanPostProcessor、BeanFactoryPostProcessor 以及国际化和内置了ApplicationEvent的发布机制。

还有其他的一些核心类包括了Bean定义BeanDefinition、用于bean注册的类BeanDefinitionRegistry、用于配置解析的AnnotatedBeanDefinitionReader解析器、用于配置扫描的ClassPathBeanDefinitionScanner扫描器等等。
下一章节开始从源码角度介绍IOC容器以及Bean的完整的加载过程。