1、IoC(Inversion of Control 控制反转)概念
1.1、IoC是一种设计思想,松耦合。
- Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,IoC 容器管理的 Java 对象称为 Spring Bean。
- IoC 容器是 Spring 框架中最重要的核心组件之一。
- 调用者掌握着被调用者对象创建的控制权
1.2、 IOC容器创建对象的步骤
- 定义 XML 配置文件、注解、Java 配置类等方式,对 Java 对象进行定义
- Spring 启动时,IoC 容器会自动根据对象定义,将这些对象创建并管理起来
- 要使用某个 Bean 时,可以直接从 IoC 容器中获取
依赖注入(Denpendency Injection,简写为 DI)
依赖注入本质上是 Spring Bean 属性注入的一种,只不过这个属性是一个对象属性而已。
2、IoC 的工作原理
2.1、IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术
- 在配置文件(例如 Bean.xml)中,对各个对象以及它们之间的依赖关系- 进行配置;
- 我们可以把 IoC 容器当做一个工厂,这个工厂的产品就是 Spring Bean;
- 容器启动时会加载并解析这些配置文件,得到对象的基本信息以及它们之间的依赖关系;
- IoC 利用 Java 的反射机制,根据类名生成相应的对象(即 Spring Bean),并根据依赖关系将这个对象注入到依赖它的对象中。
2.2、IOC容器的实现
Spring 框架为我们提供了两种不同类型 IoC 容器,它们分别是 BeanFactory 和 ApplicationContext。
BeanFactory 采用懒加载(lazy-load)机制,容器在加载配置文件时并不会立刻创建 Java 对象,只有程序中获取(使用)这个对对象时才会创建。
ApplicationContext 接口有两个常用的实现类,具体如下表。
实现类 | 描述 | 示例代码 |
ClassPathXmlApplicationContext | 加载类路径 ClassPath 下指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作 | ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLocation); |
FileSystemXmlApplicationContext | 加载指定的文件系统路径中指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作 | ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation); |