Spring:IoC容器
基础概念
DI:依赖注入
什么是依赖注入?
依赖注入(DI)是控制反转(IoC)的一个具体例子,即:
- 依赖:A类 依赖 B类
- 注入: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 容器需要知道:
- 如何创建一个Bean
- Bean的生命周期
- Bean的依赖关系
IoC 核心流程
这个过程通常分为俩个阶段:容器启动阶段、Bean实例化阶段。
容器启动阶段
- 加载配置文件信息
- Bean注册
Bean 实例化阶段
- 初始化
- 属性设置
源码解读分析
BeanFactory、ApplicationContext
BeanFactory:为Spring的IoC功能提供了底层基础。
ApplicationContext,是 BeanFactory
的一个子接口。它增加了:
- 更容易与Spring的AOP功能集成
- Message resource 处理(用于国际化)
- 事件发布
- 应用层的特定上下文,如
WebApplicationContext
,用于 web 应用
下表列出了 BeanFactory
和 ApplicationContext
接口和实现所提供的功能。
功能 | BeanFactory | ApplicationContext |
---|---|---|
Bean的实例化/注入 | Yes | Yes |
集成的生命周期管理 | No | Yes |
自动注册 BeanPostProcessor | No | Yes |
自动注册 BeanFactoryPostProcessor | No | Yes |
方便的 MessageSource 访问(用于国际化) | No | Yes |
内置的 ApplicationEvent 发布机制 | No | Yes |
参考资料:
- Spring中文文档:https://springdoc.cn/
- Spring源码解读:https://github.com/seaswalker/spring-analysis
评论