IoC 容器
本章介绍了Spring的控制反转(Inversion of Control, IoC)容器。
部分总结
📄️ Spring IoC容器和Bean简介
本章介绍了Spring框架对控制反转(IoC)原则的实现。依赖注入(DI)是IoC的一种特殊形式,在这种形式中,对象仅通过构造函数参数、工厂方法的参数,或者在对象实例被创建或从工厂方法返回后设置在其上的属性来定义它们的依赖关系(即它们所协同工作的其他对象)。然后,IoC容器在创建bean时将这些依赖关系注入到该bean中。这一过程从根本上来说,与bean本身通过直接构造类或使用服务定位器(Service Locator)模式等机制来控制其依赖关系的实例化或定位的过程是相反的(因此得名“控制反转”)。
📄️ 容器概述
org.springframework.context.ApplicationContext接口代表了Spring的IoC(控制反转)容器,负责实例化、配置和组合Bean。容器通过读取配置元数据来获取关于需要实例化、配置和组合的组件的指令。这些配置元数据可以是带有注解的组件类、带有工厂方法的配置类,或者是外部的XML文件或Groovy脚本。无论是哪种格式,你都可以用它们来构建你的应用以及这些组件之间的复杂依赖关系。
📄️ Bean概述
Spring的IoC容器管理一个或多个Bean。这些Bean是根据你提供给容器的配置元数据创建的(例如,以XML \<bean/> 定义的形式)。
🗃️ 依赖
6 个项目
📄️ Bean Scopes
当你创建一个bean定义时,你实际上是在为创建由该bean定义所描述的类的实例制定一份“配方”。将bean定义视为一份“配方”的这一概念非常重要,因为这意味着与创建一个类一样,你可以用同一份“配方”来创建多个对象实例。
📄️ 自定义Bean的属性
Spring框架提供了许多接口,你可以使用这些接口来自定义bean的属性。本节将它们分类如下:
📄️ Bean定义继承
bean定义可以包含大量的配置信息,包括构造函数参数、属性值以及容器特定的信息,如初始化方法、静态工厂方法名称等。子bean定义会从父定义继承配置数据。子定义可以根据需要覆盖某些值或添加其他值。使用父bean和子bean定义可以大大减少输入工作量。实际上,这是一种模板化的形式。
📄️ 容器扩展点
通常,应用程序开发人员不需要继承ApplicationContext的实现类。相反,可以通过插入特殊集成接口的实现来扩展Spring的IoC容器。接下来的几节将描述这些集成接口。
🗃️ 基于注解的容器配置
8 个项目
📄️ 类路径扫描与管理组件
本章中的大多数示例都使用XML来指定配置元数据,这些元数据用于生成Spring容器中的每个BeanDefinition。前一节(基于注解的容器配置)展示了如何通过源代码级别的注解来提供大部分配置元数据。然而,在那些示例中,“基础”Bean定义仍然是明确地在XML文件中定义的,而注解仅用于驱动依赖注入过程。
📄️ 使用JSR 330标准注解
Spring支持JSR-330标准注解(依赖注入)。这些注解的扫描方式与Spring自身的注解相同。要使用它们,你需要在类路径中包含相关的jar文件。
🗃️ 基于 Java 类的容器配置
6 个项目
📄️ 环境抽象
Environment接口是容器中集成的一种抽象层,它模拟了应用程序环境的两个关键方面:配置文件(profiles)和属性(properties)。
📄️ 注册LoadTimeWeaver
LoadTimeWeaver被Spring用来在类被加载到Java虚拟机(JVM)时动态地对其进行转换。
📄️ ApplicationContext的附加功能
正如章节介绍中所讨论的,org.springframework.beans.factory包提供了管理和操作Bean的基本功能,包括以编程方式管理。org.springframework.context包则增加了ApplicationContext接口(该接口继承自BeanFactory接口),同时还扩展了其他接口,以更加面向应用程序框架的方式提供额外的功能。许多人以完全声明式的方式使用ApplicationContext,甚至不通过编程方式创建它,而是依赖于诸如ContextLoader这样的支持类,在Jakarta EE Web应用程序的正常启动过程中自动实例化ApplicationContext。
📄️ BeanFactory API
BeanFactory API为Spring的IoC(控制反转)功能提供了基础。它的具体契约主要用于与Spring的其他部分以及相关的第三方框架集成,而其DefaultListableBeanFactory实现则是更高级别的GenericApplicationContext容器中的关键委托组件。