1.4 Spring IoC

简介: 控制反转(Inversion of Control,IoC)是面向对象编程中的一个设计原则,用来降低程序代码之间的耦合度。

 

1.控制反转IoC

控制反转(Inversion of Control,IoC)是面向对象编程中的一个设计原则,用来降低程序代码之间的耦合度。

在传统面向对象编程中

在传统面向对象编程中,获取对象的方式是用new关键字主动创建一个对象,也就是说调用者掌握着对象的控制权。传统面向对象程序设计原则下图所示。

在使用Spring框架后

在使用Spring框架后,对象的实例不再由调用者来创建,而是由Spring容器来创建。Spring容器会负责控制程序之间的关系,而不是由调用者的代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。IoC设计原则下图所示。


2.依赖注入DI

依赖注入概念

依赖注入(Dependency Injection,DI)就是由IoC容器在运行期间动态地将某种依赖资源注入对象之中,是Spring框架核心IoC的具体实现。

依赖注入的作用

依赖注入作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其目的是降低系统各层之间的耦合关系。

依赖注入实现方式

依赖注入通常有构造方法注入、setter方法注入等。

    • 构造方法注入

    构造方法注入是指Spring容器调用构造方法注入被依赖的实例,构造方法可以是有参的或者是无参的。Spring在读取配置信息后,会通过反射方式调用实例的构造方法,如果是有参构造方法,可以在构造方法中传入所需的参数值,最后创建类对象。

      • setter方法注入

      setter方法注入是Spring最主流的注入方法,这种注入方法简单、直观,它是在被注入的类中声明一个setter方法,通过setter方法的参数注入对应的值。

      3.基于xml配置的构造方法注入案例

      通过构造方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现Student输出学生姓名和年龄。

      案例实现详见链接:案例02 基于xml配置的构造方法注入案例

      4.基于xml配置的setter方法注入案例

      通过setter方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现StudentService调用StudentDao的saveStudent操作。

      案例实现详见链接:案例03 基于xml配置的setter方法注入案例

      5.Spring容器API

      Spring提供了相应API来管理Bean,在Spring容器的API中,最常用的是BeanFactory和ApplicationContext这两个接口。

      BeanFactory接口

      BeanFactory是Spring容器最基本的接口,它的实现机制采用的是Java经典的工厂模式。BeanFactory接口提供了创建和管理Bean的方法,BeanFactory接口的常用方法如下表所示。

      方法名称

      描述

      getBean(String name)

      根据参数名称获取Bean

      getBean(String name,Class type)

      根据参数名称、参数类型获取Bean

      T getBean(Class requiredType)

      根据参数类型获取Bean

      Object getBean(String name,Object... args)

      根据参数名称获取Bean

      isTypeMatch(String name,Resolvable Typetype)

      判断是否有与参数名称、参数类型匹配的Bean

      Class getType(String name)

      根据参数名称获取类型

      String[] getAliases(String name)

      根据实例的名字获取实例的别名数组

      boolean containsBean(String name)

      根据Bean的名称判断Spring容器是否含有指定的Bean

      ApplicationContext接口

      ApplicationContext接口建立在BeanFactory接口的基础之上,它丰富了BeanFactory接口的特性,例如,添加了对国际化、资源访问、事件传播等方面的支持,ApplicationContext接口的常用实现类如下表所示。

      方法名称

      描述

      ClassPathXmlApplicationContext

      从类路径加载配置文件,实例化ApplicationContext接口

      FileSystemXmlApplicationContext

      从文件系统加载配置文件,实例化ApplicationContext接口

      AnnotationConfigApplicationContext

      从注解中加载配置文件,实例化ApplicationContext接口

      WebApplicationContext

      在Web应用中使用,从相对于Web根目录的路径中加载配置文件,实例化ApplicationContext接口

      ConfigurableWebApplicationContext

      扩展了WebApplicationContext类,它可以通过读取XML配置文件的方式实例化WebApplicationContext类

      目录
      相关文章
      |
      2天前
      |
      XML Java 数据格式
      Spring IoC容器初始化过程(xml形式)
      Spring IoC容器初始化过程(xml形式)
      52 0
      |
      2天前
      |
      Java Spring
      Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
      Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
      |
      2天前
      |
      Java 测试技术 开发者
      Spring IoC容器通过依赖注入机制实现控制反转
      【4月更文挑战第30天】Spring IoC容器通过依赖注入机制实现控制反转
      22 0
      |
      2天前
      |
      Java 数据库连接 API
      【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
      【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
      56 0
      |
      2天前
      |
      XML Java 数据格式
      Spring框架入门:IoC与DI
      【5月更文挑战第15天】本文介绍了Spring框架的核心特性——IoC(控制反转)和DI(依赖注入)。IoC通过将对象的创建和依赖关系管理交给容器,实现解耦。DI作为IoC的实现方式,允许外部注入依赖对象。文章讨论了过度依赖容器、配置复杂度等常见问题,并提出通过合理划分配置、使用注解简化管理等解决策略。同时,提醒开发者注意过度依赖注入和循环依赖,建议适度使用构造器注入和避免循环引用。通过代码示例展示了注解实现DI和配置类的使用。掌握IoC和DI能提升应用的灵活性和可维护性,实践中的反思和优化至关重要。
      17 4
      |
      2天前
      |
      XML Java 程序员
      Spring特性之二——IOC控制反转
      Spring特性之二——IOC控制反转
      16 4
      |
      2天前
      |
      安全 Java 开发者
      在Spring框架中,IoC和AOP是如何实现的?
      【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
      23 0
      |
      2天前
      |
      XML Java 程序员
      什么是Spring的IoC容器?
      【4月更文挑战第30天】什么是Spring的IoC容器?
      20 0
      |
      2天前
      |
      Java Spring 容器
      【Spring系列笔记】IOC与DI
      IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
      34 2
      |
      2天前
      |
      Java 测试技术 数据库连接
      Spring中ioc的优点
      总之,Spring中的IoC提供了一种更加灵活、可维护、可测试和可扩展的方式来管理组件之间的依赖关系,从而提高了应用程序的质量和可维护性。这使得开发人员能够更专注于业务逻辑而不是底层的技术细节。
      32 1