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类

      目录
      相关文章
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
      这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
      Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
      |
      6天前
      |
      XML Java 数据格式
      Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
      Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
      57 18
      Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
      |
      3月前
      |
      XML druid Java
      Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
      Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
      42 0
      |
      7天前
      |
      Java 数据库连接 数据格式
      【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
      IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
      【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
      |
      7天前
      |
      Java 数据库连接 Maven
      Spring基础1——Spring(配置开发版),IOC和DI
      spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI
      Spring基础1——Spring(配置开发版),IOC和DI
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
      这篇文章详细介绍了Spring框架中IOC容器的Bean管理,特别是基于XML配置方式的实现。文章涵盖了Bean的定义、属性注入、使用set方法和构造函数注入,以及如何注入不同类型的属性,包括null值、特殊字符和外部bean。此外,还探讨了内部bean的概念及其与外部bean的比较,并提供了相应的示例代码和测试结果。
      Spring5入门到实战------3、IOC容器-Bean管理XML方式(一)
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------5、IOC容器-Bean管理(三)
      这篇文章深入探讨了Spring5框架中IOC容器的高级Bean管理,包括FactoryBean的使用、Bean作用域的设置、Bean生命周期的详细解释以及Bean后置处理器的实现和应用。
      Spring5入门到实战------5、IOC容器-Bean管理(三)
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
      这篇文章是Spring5框架的实战教程,主题是IOC容器中Bean的集合属性注入,通过XML配置方式。文章详细讲解了如何在Spring中注入数组、List、Map和Set类型的集合属性,并提供了相应的XML配置示例和Java类定义。此外,还介绍了如何在集合中注入对象类型值,以及如何使用Spring的util命名空间来实现集合的复用。最后,通过测试代码和结果展示了注入效果。
      Spring5入门到实战------4、IOC容器-Bean管理XML方式、集合的注入(二)
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
      这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
      Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
      |
      1月前
      |
      XML Java 数据格式
      Spring5入门到实战------2、IOC容器底层原理
      这篇文章深入探讨了Spring5框架中的IOC容器,包括IOC的概念、底层原理、以及BeanFactory接口和ApplicationContext接口的介绍。文章通过图解和实例代码,解释了IOC如何通过工厂模式和反射机制实现对象的创建和管理,以及如何降低代码耦合度,提高开发效率。
      Spring5入门到实战------2、IOC容器底层原理