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类

      目录
      相关文章
      |
      4月前
      |
      XML Java 数据格式
      Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
      这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
      Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
      |
      18天前
      |
      存储 缓存 Java
      Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
      在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
      38 2
      |
      1月前
      |
      XML 缓存 Java
      搞透 IOC、Spring IOC ,看这篇就够了!
      本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
      |
      3月前
      |
      XML Java 数据格式
      Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
      Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
      248 18
      Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
      |
      3月前
      |
      XML Java 测试技术
      spring复习01,IOC的思想和第一个spring程序helloWorld
      Spring框架中IOC(控制反转)的思想和实现,通过一个简单的例子展示了如何通过IOC容器管理对象依赖,从而提高代码的灵活性和可维护性。
      spring复习01,IOC的思想和第一个spring程序helloWorld
      |
      1月前
      |
      安全 Java 测试技术
      Java开发必读,谈谈对Spring IOC与AOP的理解
      Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
      39 0
      |
      2月前
      |
      Java Spring 容器
      Spring IOC、AOP与事务管理底层原理及源码解析
      【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
      146 9
      |
      2月前
      |
      存储 开发框架 Java
      什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
      文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
      38 0
      什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
      |
      3月前
      |
      缓存 Java Spring
      手写Spring Ioc 循环依赖底层源码剖析
      在Spring框架中,IoC(控制反转)是一个核心特性,它通过依赖注入(DI)实现了对象间的解耦。然而,在实际开发中,循环依赖是一个常见的问题。
      46 4
      |
      2月前
      |
      XML Java 数据格式
      Spring IOC容器的深度解析及实战应用
      【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
      80 0