SpringIOC是如何降低代码的耦合度的

降低代码耦合度的方法 -依赖注入 降低代码耦合度的方法 -依赖注入 什么是依赖注入 为什么要使用依赖注入 Laravel中的依赖注入 什么是依赖注入 什么是依赖注入,就要先了解什么是依赖。 在面向对象语言中,A类需要引用B类中Y方法的,则称A类和B类就构成了以依赖关系,A依赖于B。在对象中也存在依赖关系,如A类的X对象依赖于B类的对象Y。 在项目的开发流程中,虽然代码这样写看起来没什么,但是到了需... 阅读详情

理解Spring IOC概念及如何降低代码耦合度

很多八股文需要更深入去详细了解其思想,才不会记得那么累那么枯燥。本想查资料总结一篇关于IOC容器解耦的思想,但是看到这篇文章感觉挺好的,就不需要重写了。

什么是IOC

IOC(Inversion of Control)控制反转,是Spring中一个重要的特性,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。那么控制什么的权利被反转了呢,我们知道在写代码的过程中,经常会出现两个对象之间出现依赖关系,当A对象依赖B对象时,我们通常在A对象中通过new的方式来创建它的依赖对象B,而控制反转之后,对于对象的创建权被托付给IOC容器了,也就是这些对象由容器来产生,而不是对象在需要的时候再去创建自己的依赖对象。

举例来理解IOC,一个家庭的组建需要夫妻两个,某种意义上,我们可以说两者之间存在依赖关系。传统方式就是,当我需要组建一个家庭时,我自己去找对象,自己去组建家庭,而IOC方式就是将找对象的权利委托给爸爸妈妈,当我出生时,爸爸妈妈就为我指腹为婚,为我找好了对象。

IOC如何降低了代码之间的耦合度

从传统方式到IOC一步步解耦

第一步转变 直接new对象————>面向接口编程

最开始我们创建一个对象是采取new对象的方式,但这样不可以实现多态,比如我创建一个person对象,里面有一个eat(Apple apple)方法,那么调用这个eat方法的类,需要传入苹果(Apple)对象,之后我的这个方法改成吃梨子了,这个方法又改成eat(Pear pear)了,调用eat方法的类,又需要把之前的苹果改成梨子,扩展性差,于是出现了面向接口编程,我在eat方法里面传入水果(Fruit)接口,之后苹果,梨只需要实现接口即可,调用eat方法的类,想吃梨子就传入梨子,想吃苹果传入苹果即可。

补充

其实就是想做到当我像改变new的对象或其中某个方法时不需要去修改代码,另外“封装”的思想:当内部接口类发生改变时不会影响外部类的调用。

第二步转变 面向接口编程————>工厂模式

面向接口编程后,解决接口和实体类之间的耦合。
在面向接口编程中我们常常会出现这样的代码UserDao userDao = new UserDaoImpl();假设现在不用这个UserDaoImpl了,而改用UserDao的另一个实现类UserDaoImpl2,UserDap userDao = new UserDaoImpl()需要改为UserDao userDao = new UserDaoImpl2(),这样也就是接口和实现类出现了耦合。

工厂模式如何去解决耦合问题呢——不让接口和实现类产生关系,而是找一个中间人,也就是工厂,实现类必须要从工厂中取出来。工厂的意思也就是一个批量制造同样规格(规格也就是接口类所提供好的规范)类的类。

class BeanFactory {
    public static UserDao getUserDao() {
        return new UserDaoImpl();
    }
    public static StudentDao getStudentDao() {
        return new StudentDaoImpl();
    }
}

UserDao userDao = new UserDaoImpl —> UserDao userDao = BeanFacotry.getUserDao();
StudentDao studentDao = new StudentDaoImpl ----> StudentDao studentDao = BeanFacotry.getStudentDao();
这样的话,如果userDao变成了需要UserDaoImpl1,studentDao变成了需要StudentDaoImpl1,我只需要去BeanFactory中改对应的getUserDao和getStudentDao方法即可。这样实际上就是从改多个类变成了改BeanFacotry一个方法,这样接口类和工厂类产生了耦合。

第三步转变 工厂模式————>工厂模式+反射+配置文件(IOC的底层实现)

为了能解决接口类和工厂类的耦合,是不是也就是要解决

public static UserDao getUserDao() {
    return new UserDaoImp();
}

这个方法中只能返回UserDaoImpl或者UserDaoImpl1的问题,我们希望他可以根据我们的需要返回需要的UserDaoImpl,如何解决?
配置xml文件——指定需要返回的UserDaoImpl

<bean id="userDao" class="**.UserDaoImpl">

工厂类

class BeanFactory {
    public static UserDao getUserDao(String id) {
        // String className = 解析配置文件xml 拿到id对应的class
        // 反射
        class clazz = class.forName(className);
        return clazz.newInstance();
    }
}

这样的话如果我们需要改UserDao的实现类的类型,我们可以直接在配置文件中修改,就不用改代码。

Spring中DI概念

DI:依赖注入,前提是必须要有IOC的环境,Spring管理这个类的时候将类依赖的属性注入进来我们在写代码的时候知道,对象和对象之间经常会存在依赖关系,当我们使用了IOC将对象的创建权交给spring之后,spring在创建对象的同时一定也要将对象相应的依赖同时创建好,否则创建的这个对象就是一个功能不完善的对象,那么依赖注入的这个过程就是它的另一个特性DI(依赖注入)。

SpringIoc方案二不使用配置文件开发(课时十二)  Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:   ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Io 阅读详情

相关推荐

Spring IoC:控制反转的魔法,揭秘依赖注入的秘密

Spring IoC容器为Java开发者提供了一种高效、可扩展的依赖管理方式。通过本文的介绍,您应该已经了解了Spring IoC容器的基本概念、使用方法和优势。在实际开发过程中,Spring IoC容器可以帮助您更好地管理对象之间的依赖关系,提高代码的可维护性和可扩展性。无论您是初学者还是有一定经验的开发者,都应该掌握Spring IoC容器的使用,以便在项目中发挥其强大的功能。希望本文的内容能对您有所帮助,让您的开发之路更加顺畅!

u013558123的博客 635

Spring IOC 是如何实现降低耦合度的?

首先,我们需要了解什么是 Spring IOC。IOC,全称为 Inversion of Control,即控制反转。它是 Spring 框架的核心概念之一。传统的程序依赖关系是直接在代码中通过 new 关键字创建对象,导致各个类之间紧密耦合。而通过使用 IOC 容器,我们将对象的创建和管理交给容器来完成,使得程序开发者只需关注业务逻辑,而不需要关心对象的实例化和依赖关系。

网络技术联盟站 474

STM32----SPI+DMA高效读写外部Flash的配置与实战

本文详细介绍了STM32通过SPI+DMA高效读写外部Flash的配置与实战方法。针对大量数据传输场景,使用DMA技术可显著提升系统效率,释放CPU资源。文章包含完整的代码实现、常见问题调试技巧以及性能优化建议,帮助开发者快速掌握这一关键技术。

pea55的博客 1031

Spring-IOC浅析

IOC:控制反转,原本我们创建一个对象是我们手动new出来的,这样导致耦合度高。现在将对象创建的权利交给工厂,由工厂来创建对象,从而达到解耦合的作用。 1.没有使用IOC的时候 ①我们在Vip类中引用UserService 的时候是使用new的方式 UserService userService = new UserServiceImpl() 如果我们修改了UserServiceImpl名称,那 时我们还要到该类中去修改对应的名称,这样代码的耦合度就很高,开发效率低下。我们想要的效果是我们在Vip中只

Ding9610的博客 253

11n、11ac、11ax和11be MCS表(全网最全)

1、无线协商速率介绍及计算 2、附11n、11ac、11ax 完整MCS速率表

weixin_41500064的博客 2万+

Oracle19c集群节点故障恢复:从主机重装到重新加入集群的完整指南

本文详细介绍了Oracle19c集群节点故障恢复的全过程,从主机重装到重新加入集群的完整指南。重点讲解了保持集群配置一致性、彻底清理故障节点残留信息和分阶段验证等关键恢复原则,帮助DBA高效解决节点故障问题,确保集群稳定运行。

weixin_42524276的博客 256

使用 spring 的 IOC 解决程序耦合

工厂模式解耦 在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。 那么,这个读取配置文件,创建和获取三层对象的类就是工厂。 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于...

weixin_34187862的博客 397

从原理到调试:一次搞懂Camera Sensor的曝光、增益与帧率三角关系

本文深入解析Camera Sensor中曝光、增益与帧率之间的动态平衡关系,揭示低光环境下帧率下降的根本原因。通过实际调试案例和底层公式分析,帮助开发者理解如何优化相机参数设置,实现画质与流畅度的最佳平衡。

weixin_31310913的博客 429

Spring的IOC解决程序耦合

spring-beans和spring-core模块是Spring框架的核心模块,包含了控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)。此外,该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext 是该模块的核心接口,它的超类是 BeanFactory。将持久层的实现类和业务层实现类封装成bean ,以后表现层需要这两个对象的时候就在这个ioc容器中取。在业务层调用持久层时仍然有耦合。

qq_65142821的博客 1149

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 411

ArcGIS拓扑面错误批量修改

在工作学习中经常会遇到拓扑修改的问题,当数据量巨大的时候会产生拓扑问题 当拓扑错误数量巨大时,人工逐一修改是不现实的,基于此利用gis自带工具箱实现拓扑面类错误的批量修改。 一、.常见拓扑错误的类型: 1面重叠 2空隙(绿色部分) 二、拓扑检查 1新建数据库-----新建数据集—导入数据. 2新建拓扑 3修改拓扑容差及名称 添加拓扑修改规则 完成拓扑检查-查看拓扑错误 三、拓扑批量...

qq_43173805的博客 3万+

SpringIOC核心功能概述(面试)

Spring IoC是Java企业级应用开发中的重要框架,通过控制反转(IoC)和面向切面编程(AOP),极大地提高了代码的可重用性和扩展性。Spring IoC使得开发人员能够专注于解决复杂的业务问题,而不是陷入繁琐的底层代码中。本文将深入探讨Spring IoC的定义、背景、特点、应用场景以及实际应用中的优势。Spring IoC是一种基于Java的开源框架,它实现了控制反转(IoC)和面向切面编程(AOP)。控制反转(IoC)是一种设计模式,通常用于降低代码之间的耦合度,使得代码更容易重用和扩展。

My_wife_QBL的博客 112

KCP(快速可靠UDP)——用带宽换延迟的极致艺术

想象你是一个外卖平台的调度员。这就是KCP的本质——

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 202

spring ioc 降低耦合度?

spring ioc在哪些方面降低了程序耦合度。

Fourier_1024的博客 740

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3932

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

springIoc

控制反转。

一条骆驼的博客 340

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

不是吧?面试被问了几百遍的 IoC 和 AOP 还搞不清楚?那这份内容要抓紧码住学起来了!

IOC(控制反转)就是依赖倒置原则的一种代码设计思路,就是把原先在代码里面需要实现的对象创建、对象之间的依赖、反转给容器来帮忙实现 SpringIOC 容器通过XML,注解等其他方式配置其他方式类以及类之间的依赖关系,完成了对象的创建和依赖的管理注入。实现IOC的主要设计模式是工厂模式。这句话的意思是: IOC控制反转的含义,它是把Java面向对象的创建的过程,交给容器来进行管理一种机制。 它的实现方式,是通过XM,获取注解,配置类的方式实现类和类之间的依赖关系。 来完成的对象的创建和依赖管理的注入。集中管

老男孩的架构路 547

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Spring】spring的IoC概念

Spring IoC支持三种主要的注入方式:构造器注入、setter方法注入和根据注解注入。这些方式可以根据实际需求灵活选择。或者在字段上使用@Autowired。或者使用Java配置类。或者使用Java配置类。

wosixiaokeai的博客 695

工作中责任链模式用法及其使用场景?

笔者是金融保险行业,有这么一种场景,业务员录完单后提交核保,这时候系统会对保单数据进行校验,如不允许手续费超限校验,客户真实性校验、费率限额校验等等,当校验一多时,维护起来特别麻烦,代码耦合度太高。

猪大肠的博客 1722

使用设计模式改写if/else或switch/case语句

相比传统的if/else语句,使用策略模式后代码体现出了面向对象的特性,扩展性更强,但是还是存在一些缺陷,需要一个map,而且需要new出每个实现类的实例。APPLE("苹果", "apple"), PINEAPPLE("菠萝", "pineapple"), PEAR("梨", "pear");System.out.println("又酸又甜的菠萝");System.out.println("又酸又甜的菠萝");System.out.println("又酸又甜的菠萝");

u010178395的博客 2015

Spring IoC容器

这种做法可能导致代码的耦合度很高,难以维护和扩展。BeanFactory:是Spring框架最基本的IoC容器,提供了最基本的IoC功能,可以加载配置文件中定义的Bean对象,并且根据需要将它们实例化、配置和管理。总的来说,Spring IoC容器是Spring框架的核心功能之一,它采用了控制反转的思想,可以帮助开发人员更加灵活、简单、高效地管理对象之间的依赖关系,提高代码的可维护性。降低耦合度:IoC容器将对象之间的依赖关系从代码中抽离出来,使得对象之间的耦合度降低,更加灵活和易于维护。

lonely_baby的博客 172

Java面试官:你知道Spring的IOC吗?那么,它为什么这么重要呢?

这种思想就是IoC(为了更好的理解,我们可以这样认为,对象创建和使用的控制权转移到了Spring容器,由Spring容器来控制)。同样是上面的例子,假如说Bean A需要修改,如果没有IOC的话,所有引用到A的其他Bean都需要感知这个逻辑,并且做对应的修改。在类和类之间存在控制权,控制权指的是对象的创建和使用,比如有类A和类B,我们之前的做法是在A中调用B,那么控制权就在A中,这样做的耦合度较高,如果修改了 B,A也要做相应修改。在容器类中定义一个注入方法,用于将对象注入到需要依赖的对象中。

qq_64919823的博客 624

(转帖)Spring IoC的工作原理

在 Java 软件开发过程中,系统中的各个对象之间、各个模块之间、软件系统和硬件系统之间,或多或少都存在一定的耦合关系。 若一个系统的耦合度过高,那么就会造成难以维护的问题,但完全没有耦合的代码几乎无法完成任何工作,这是由于几乎所有的功能都需要代码之间相互协作、相互依赖才能完成。因此我们在程序设计时,所秉承的思想一般都是在不影响系统功能的前提下,最大限度的降低耦合度。 IoC 底层通过工厂模式、Java 的反射机制、XML 解析等技术,将代码的耦合度降低到最低限度,其主要步骤如下。在配置文件(例如 Be

cleble的专栏 216

Spring IOC 控制的数据流向?

IOC(Inversion of Control):控制反转,即指获取对象的方式被反转了,我们只需要在applicationContext.xml(Spring的配置文件)文件配置元数据(即指xml)中的bean指定相应class(类)的全路径,Spring中的容器(BeanFactory)会负责类对象的创建、配置和管理这些对象及它们之间的依赖关系,而且这些对象和我们通过new Object()的对象没有区别,这样最终会达到解耦的目的(即减少代码之间的依赖);Spring IOC关键概念理解。

weixin_66107848的博客 88

ioc和aop

springIOC原理 IOC(控制反转):依赖倒置原则的一种代码设计思路,将原来在代码里面需要实现的,对象创建,对象之间的依赖,反转给容器来帮忙实现,在启动tomacat时,根据基于注解的方式启动容器的类(启动类)下的包中所有符合规则和条件的类,初始化放在map集合中 DI机制:在实际开发生产中,类和类之间有很多时候存在依赖关系,一个对象依赖另一个对象,把存在依赖关系的对象实例化的过程称之为:依赖注入 SpringIOC容器通过xml,注解等其他方式配置类与类之间的依赖关系,完成对象的创建和依赖的管理注

qq_44194174的博客 123

spring 在jsp循环controller传来的数据_手把手教会你使用Spring框架(三)

>>>Spring框架完整视频教程<<<>>> 学习交流群 < < <一、Spring整合Mybatis1. 使用Servlet+MVC+Mybatis+Jsp完成用户登录在mysql中创建t_user用户信息表(id,name,pwd).使用idea中使用Maven搭建一个基本的war类型的项目 项目名称为 01-s...

weixin_28873663的博客 299
上一篇: 集合的重点
下一篇: JIRACloud环境搭建
Senye_ing
博客等级 码龄8年 24粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值