Spring:IoC容器

基础概念

DI:依赖注入

什么是依赖注入?

依赖注入(DI)是控制反转(IoC)的一个具体例子,即:

  1. 依赖:A类 依赖 B类
  2. 注入:B类 将被IoC 注入到 A类中(在A类创建的时候)

目的:

  • 使应用程序尽可能独立,便于复用、测试。
  • 有助于将这些程序粘合在一起,同事保持独立性。

IoC 容器

Spring IoC容器 是 Spring 框架的核心。

  • 容器将创建对象,将它们连接在一起,配置它们,并管理它们从创建到销毁的完整生命周期。

  • 容器通过读取提供的配置元数据来获取关于要实例化、配置和组装哪些对象的指令。 配置元数据可以由 XML、Java 注解或 Java 代码表示。

Spring IoC 容器利用 Java POJO 类和配置元数据来生成完全配置且可执行的系统或应用程序。

![使用过程]!(http://image.yujian95.cn/blog/202306262141422.png)

2种核心容器:

  • BeanFactory:简单容器
  • ApplicationContext:复杂容器

ApplicationContext 扩展了 BeanFactory,增加了:

  • AOP 集成
  • Message Resource 处理(国际化)
  • 事件发布
  • 上下文

注入方式:

  • 构造函数
  • Setter方法
  • 自动装配(按照类型、按照名称)
  • 工厂方法(静态、非静态)

Bean

Spring 容器使用 DI 来管理组成的应用程序的组件。这些对象被称为 Spring Bean。

IoC 容器需要知道:

  1. 如何创建一个Bean
  2. Bean的生命周期
  3. Bean的依赖关系

IoC 核心流程

这个过程通常分为俩个阶段:容器启动阶段、Bean实例化阶段。

容器启动阶段

  1. 加载配置文件信息
  2. Bean注册

Bean 实例化阶段

  1. 初始化
  2. 属性设置

源码解读分析

ClassPathXmlApplicationContext

BeanFactory、ApplicationContext

BeanFactory:为Spring的IoC功能提供了底层基础。

ApplicationContext,是 BeanFactory 的一个子接口。它增加了:

  • 更容易与Spring的AOP功能集成
  • Message resource 处理(用于国际化)
  • 事件发布
  • 应用层的特定上下文,如 WebApplicationContext,用于 web 应用

下表列出了 BeanFactoryApplicationContext 接口和实现所提供的功能。

功能BeanFactoryApplicationContext
Bean的实例化/注入YesYes
集成的生命周期管理NoYes
自动注册 BeanPostProcessorNoYes
自动注册 BeanFactoryPostProcessorNoYes
方便的 MessageSource 访问(用于国际化)NoYes
内置的 ApplicationEvent 发布机制NoYes

参考资料: