【Spring框架二】——什么是Spring IOC、 什么是Spring 依赖注入

这篇具有很好参考价值的文章主要介绍了【Spring框架二】——什么是Spring IOC、 什么是Spring 依赖注入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

【Spring框架一】——Spring框架简介

【Spring框架三】——Spirng IOC和DI的实现



前言

本篇博客主要讲解的是Spring 的IOC以及DI(依赖注入)的基本概念和优势利弊,如果想知道如何实现Spring IOC与DI可以访问博主的另外一篇博客。
【Spring框架三】——Spirng IOC和DI的实现


一、Spring的IOC(Inversion of Control)

1.核心思想:

它的核心思想是将对象的创建管理交给容器来完成,而不是由程序员手动创建和管理对象。

在Spring中IOC是通过Bean容器来实现的。当Spring容器启动时,会自动创建和管理一些Bean对象,并将它们放入容器中。程序员可以通过IOC容器来获取需要的Bean对象,而无须手动创建或管理对象。

2.Spring IOC与DI的关系

Spring的IOC容器通过依赖注入(Dependency Injection来完成对Bean的管理,依赖注入是指在创建Bean对象时,自动将它所依赖的对象注入到Bean中。通过依赖注入,程序员可以很方便的解耦和管理Bean对象之间的依赖关系。

3.Spring IOC容器的主要优势

在Spring中,IOC容器可以通过XML配置文件注解等方式进行配置和管理。通过IOC容器,程序员可以很方面的创建和管理对象,可以实现对象之间的松耦合,提高系统的可扩展性可维护性

在传统的编程模式中,对象之间通常是紧耦合的,即一个对象依赖另一个对象才能完成其工作。

Spring的IOC容器可以帮助我们实现对象之间的松耦合。当对象A需要使用对象B时,它不需要自己去创建对象B,而是将这个任务委托给Spring IOC容器。由Spring IOC容器负责创建和管理对象B的实例,并将其注入到对象A中。这样对象A就可以专注于自己的业务逻辑,而不必关心对象B是如何创建和管理的。这样的话,当对象B发送变化,只需要修改Spring IOC容器中对象B的定义,而不需要修改对象A的代码。这样解耦和方式可以提高应用程序的可维护性和扩展性。

代码示例

具体业务:假设有一个订单管理系统,其中包含两个服务类 OrderService 和 PaymentService。OrderService 需要调用 PaymentService 进行支付操作。

现在我们使用 Spring IOC 容器来管理这两个服务类。
首先,定义 PaymentService 接口和两个实现类 ClassB 和 NewClassB:

注意:只需要理解宏观业务,以及宏观上是通过Spring IOC和DI如何实现的,忽略细节能够更好的理解,如忽略@Service这个注解是做什么的等等。

代码如下:

public interface PaymentService {
    void pay();
}

@Service
public class ClassB implements PaymentService {
    @Override
    public void pay() {
        System.out.println("Pay with ClassB");
    }
}

@Service
public class NewClassB implements PaymentService {
    @Override
    public void pay() {
        System.out.println("Pay with NewClassB");
    }
}

然后,在 OrderService 中通过 @Autowired 注解将 PaymentService 注入进来:

代码如下:

@Service
public class OrderService {
    @Autowired
    private PaymentService paymentService;

    public void placeOrder() {
        System.out.println("Place order...");
        paymentService.pay();
    }
}

现在,如果我们想要更换支付实现方式,只需要在 Spring IOC 容器中修改 PaymentService 的定义即可,例如将 ClassB 替换为 NewClassB:

代码如下:

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    @Bean
    public PaymentService paymentService() {
        return new NewClassB();
    }
}

这样一来,OrderService 的代码不需要做任何修改,它仍然可以通过 Spring IOC 容器获取到 PaymentService 的实例,并调用其中的方法,以完成支付操作。这样,就可以大大降低代码的耦合性,提高代码的可维护性。

备注:对于注解的作用会再之后的Spring框架的系列博客中进行讲解。

二、使用Spring IOC容器实现对象的依赖注入的优缺点

1.优点:

  1. 对象之间的松耦合
    对象之间的依赖关系不是硬编码在代码中的,而是在 IOC 容器中通过配置来管理,从而降低了对象之间的耦合性。
  2. 对象便于管理
    IOC 容器负责对象的创建、初始化、注入和销毁等管理工作,从而让开发者可以将更多的精力放在业务逻辑的实现上,而不必关注对象的生命周期和管理。
  3. 可扩展性
    IOC 容器通过配置文件或者注解来管理对象,如果需要添加或者删除对象,只需要修改配置即可,无需修改代码,从而提高了系统的可扩展性。

2.缺点

  1. 学习成本高
    使用 Spring 的 IOC 容器需要掌握一定的 Spring 框架知识和 IOC 容器的使用方法,对于初学者来说,学习成本可能会比较高。
  2. 配置复杂
    使用 IOC 容器需要编写配置文件或者注解来描述对象之间的依赖关系,如果依赖关系比较复杂,配置文件或者注解的编写可能会比较复杂,从而增加了代码的维护难度。
  3. 运行时开销
    由于 IOC 容器需要负责对象的创建、初始化、注入和销毁等管理工作,因此在运行时会带来一定的开销,尤其是在对象比较多或者依赖比较复杂的情况下。

三、总结

目前只是对于Spring框架的IOC和DI有一个宏观的上的认识,具体如何使用Spring框架来实现IOC和DI将在后续博客进行总结和实践。文章来源地址https://www.toymoban.com/news/detail-459962.html

到了这里,关于【Spring框架二】——什么是Spring IOC、 什么是Spring 依赖注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring教程十】Spring框架实战:全面深入详解IOC/DI之--纯注解开发模式下的依赖注入&&注解读取properties配置文件

    欢迎大家回到《 Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《 如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《 全面深入详解IOC/DI注解开发》 Spring为了使用注解简化开发,并没有提供

    2024年02月04日
    浏览(56)
  • Spring IOC:详解【依赖注入数值问题 & 依赖注入方式】

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 spring版本:5.3.1 第一章:初识Spring:如何在Maven工程上搭建Spring框架? 第二章:Spring IOC:IOC在Spring底层中如何实现? 第三章:Spring IOC:详解【依赖注入数值问题 依赖注入

    2024年02月04日
    浏览(49)
  • spring--Ioc控制反转/DI依赖注入

    1.概念:在使用对象的时候,由主动的new转换为外部提供对象,将对象创建的控制权交给外部,即控制反转 2.spring提供了一个容器,称为IOC容器,用来从当ioc中的外部 3.被管理或者被创建的对象在ioc中被叫做bean 使用步骤 1.导入依赖 spring-context 依赖,用到xml文件就需导入 2.创建

    2024年02月12日
    浏览(41)
  • Spring高手之路——深入理解与实现IOC依赖查找与依赖注入

    本文从 xml 开始讲解,注解后面给出   首先,我们需要明白什么是 IOC (控制反转)和依赖查找。在 Spring Framework 中,控制反转是一种设计模式,可以帮助我们解耦模块间的关系,这样我们就可以把注意力更多地集中在核心的业务逻辑上,而不是在对象的创建和管理上。  

    2024年02月06日
    浏览(58)
  • Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入

    本文从 xml 开始讲解,注解后面给出   首先,我们需要明白什么是 IOC (控制反转)和依赖查找。在 Spring Framework 中,控制反转是一种设计模式,可以帮助我们解耦模块间的关系,这样我们就可以把注意力更多地集中在核心的业务逻辑上,而不是在对象的创建和管理上。  

    2024年02月09日
    浏览(60)
  • 深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓

    在本文中,我们将介绍 IoC (控制反转)和 DI (依赖注入)的概念,以及如何在 Spring 框架中实现它们。 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。 与传统编程相比,传统编程中我

    2024年02月04日
    浏览(57)
  • Spring5学习随笔-IOC(反转控制)、DI(依赖注入)和创建复杂对象

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 控制:对于成员变量赋值的控制权 反转控制:把对于成员变量赋值的控制权,从代码中反转(转移)到Spring工厂和配置文件中。 好处:解耦合

    2024年02月05日
    浏览(41)
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(二)(IOC之属性填充/依赖注入)

    由于Spring源码分析是一个前后联系比较强的过程,而且这边分析,也是按照代码顺序讲解的,所以不了解前置知识的情况下,大概率没办法看懂当前的内容。所以,特别推荐看看我前面的文章(自上而下次序): Spring底层核心原理解析【学习难度: ★★☆☆☆ 】 手写简易

    2024年02月12日
    浏览(39)
  • Spring6-IoC(Inversion of Control)控制反转和DI(Dependency Injection)依赖注入,手动实现IOC

    Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的 反射机制 。简单来说, 反射机制指的是程序在运行时能够获取自身

    2024年02月09日
    浏览(61)
  • 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是“桌面一霸”了。在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用。但是WPF也有很多年的历史了,并且基于MVVM的开发模式,受到了很多开发者的喜爱。 并且随着工业化的进展,以及几年前微软对.NET平台的开源,国内大多

    2024年02月06日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包