3. IoC - 概述

2023-09-09  本文已影响0人  wyh001

控制反转

控制反转(Inversion of Control,IoC)是一种软件设计原则,其核心思想是将程序的控制权交给一个外部框架或容器。传统的程序设计中,应用程序自己负责创建和管理对象,而在IoC中,对象的创建生命周期管理被交给了容器,应用程序只需声明哪些对象需要使用,具体的实例化依赖注入工作由容器负责。

依赖注入

Spring对IoC的实现是通过依赖注入(DI)实现的。

在依赖注入中,一个对象(被称为依赖)通过构造函数参数、方法参数或者属性的方式,由外部的容器来提供所依赖的其他对象(称为依赖项)。这样可以避免在类内部直接创建依赖项对象,减少了类之间的直接耦合。通过依赖注入,可以更好地实现解耦,提高可扩展性和可测试性。

依赖注入可以分为三种常见的方式:构造函数注入(Constructor Injection)、方法注入(Method Injection)和属性注入(Property Injection)。

Spring IoC容器

spring-beansspring-context两个模块是IoC的具体实现

Spring IoC 容器.png

BeanFactoryApplicationContext作为IoC容器,负责实例化、配置和组装bean。容器通过读取配置元数据来获取要实例化、配置和组装哪些对象的指令。配置元数据以XMLJava注解Java代码表示。

前者是IoC容器的根接口,提供了配置框架和基本功能,后者扩展了前者,添加了更多企业特定的功能如:事件发布器、获取环境信息、国际化和资源模式访问器等。

示例s3_11:

private static void s3_11() {
    // 1. 创建IOC容器
    ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext();
    // 2. 加载配置元数据
    applicationContext.setConfigLocation("s2/s2-bean.xml");
    // 3. 启动容器
    applicationContext.refresh();
        
    // 依赖查找
    final T1Service t1Service = applicationContext.getBean("t1Service", T1Service.class);
    log.info("【{}】", t1Service);
}

示例s3_12:

private static void s3_12() {
    // 1. 创建IOC容器
    DefaultListableBeanFactory dlbf = new DefaultListableBeanFactory();
    // 2. 加载配置元数据
    XmlBeanDefinitionReader xbdr = new XmlBeanDefinitionReader(dlbf);
    final int count = xbdr.loadBeanDefinitions("s2/s2-bean.xml");
    log.info("成功加载bean定义数量【{}】", count);

    // 依赖查找
    final T1Service t1Service = dlbf.getBean("t1Service", T1Service.class);
    log.info("【{}】", t1Service);
}
上一篇 下一篇

猜你喜欢

热点阅读