首页 > 其他分享 >Spring框架,IOC学习整理

Spring框架,IOC学习整理

时间:2024-07-13 22:07:55浏览次数:14  
标签:依赖 原则 框架 Spring 耦合度 倒置 IOC 编程

思考

平时我们创建对象的类的时候,经常会在类里面引用其他的类,形成类与类的依赖,当其中一个类功能需要进行修改的时候,就需要修改那个类的代码,由于这个类的依赖关系很复杂也就是所说的耦合度很高,所以很可能导致修改一个类就需要修改其他依赖这个类的代码,极大的影响开发的效率,这也违背了OCP开闭原则


什么是OCP开闭原则?

在软件的开发过程中应当对扩展开放,对修改关闭.也就是说,如果在进行功能扩展的时候,添加额外的类是没有问题的,但因为功能扩展而修改之前正常运行的程序,这是不允许且忌讳的.因为一旦修改之前正常运行的程序,很有可能会导致一些意外的错误,而要重新对这段代码进行测试又会浪费太多时间和精力,开发的效率差,是个相当麻烦的过程.


什么是代码耦合度

上层依赖下层,只要下层改变,上层也会跟着改变,所谓牵一发而动全身.这样也违背了另一个开发原则:依赖倒置原则
image


依赖倒置原则DIP

依赖倒置原则(Dependence Inversion Principle),简称DIP,主要倡导面向抽象编程,面向接口编程,不要面向具体编程,让上层不再依赖下层,下面改动了,上面的代码不会受到牵连。这样可以大大降低程序的耦合度,耦合度低了,扩展力就强了,同时代码复用性也会增强。(软件七大开发原则都是在为解耦合服务


IOC控制反转

image
确实已经面向接口编程了,但对象的创建是:new UserDaoImplForOracle()显然并没有完全面向接口编程,还是使用到了具体的接口实现类。什么叫做完全面向接口编程?什么叫做完全符合依赖倒置原则呢?请看以下代码:
image
如果代码是这样编写的,才算是完全面向接口编程,才符合依赖倒置原则。那你可能会问,这样userDao是null,在执行的时候就会出现空指针异常呀。你说的有道理,确实是这样的,所以我们要解决这个问题。解决空指针异常的问题,其实就是解决两个核心的问题:
● 第一个问题:谁来负责对象的创建。【也就是说谁来:new UserDaoImplForOracle() / new UserDaoImplForMySQL()】
● 第二个问题:谁来负责把创建的对象赋到这个属性上。【也就是说谁来把上面创建的对象赋给userDao属性】
如果我们把以上两个核心问题解决了,就可以做到既符合OCP开闭原则,又符合依赖倒置原则。


IOC控制反转

在Spring框架中可以满足上面所需的功能,也就是我们的IOC控制反转,将bean的创建权交给Spring的IOC容器
控制反转(Inversion of Control,缩写为IoC),是面向对象编程的一种设计思想,可以降低代码之间的耦合度,符合依赖倒置原则.
控制反转的核心思想是: 将对象的创建权交出去,将对象和对象之间的依赖关系管理权交出去,由第三方容器来负责创建与维护.
控制反转的实现方式通常为:依赖注入(Dependency Injection,简称DI)
通常,依赖注入的方式又包括两种: 通过xml来配置,就是使用setter注入
(1)setter方法来进行DI
(2)构造器方法来进行DI
通过注解(Annotation)来配置(主要学习的重点)
Spring框架就是一个实现了IOC思想的框架
IOC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GOF中.(GOF指的是23种设计模式*(使用代理也就是代理模式))


标签:依赖,原则,框架,Spring,耦合度,倒置,IOC,编程
From: https://www.cnblogs.com/MingHaiZ/p/18300815

相关文章

  • 【带小白做项目】SpringBoot:初识SpringBoot,搭建我们的第一个SpringBoot项目框架
    一事前准备工作    在我们使用SpringBoot框架搭建项目前,要首先完成JDK和Maven的安装及配置。        JDK是Java编程的基础,已经开始学习SpringBoot的同学应该已经对JDK的安装配置方法烂熟于心了,这里不再赘述,大家可以参考jdk8的安装教程保姆级,超详细(自带下载......
  • 一张图片彻底搞定springboot自动装配原理
    自动装配原理pom.xml父工程spring-boot-starter-parent<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.1</version><relativePath/>......
  • 课程设计——基于SpringBoot的医院药品管理系统
    库存管理登记入库的药品。登记出库的药品。每日检查库存下限,报警。每日检查过期的药品,报警并做退回销毁处理。对有问题的药品的退回供应商。记录退回的药品的名称、数量、金额和退货原因等。2600套成品项目,均包含万字文档,图片为目前拥有的部分项目,其他包括python,java,Andr......
  • 若依框架RuoYi前后端分离版(不容错过版)
    RuoYi是一个使用SpringBoot开发的快速开发平台。前后端分离版本的RuoYi,其前端代码通常位于RuoYi项目的一个子目录中,例如ruoyi-ui。一、下载源码推荐https://gitee.com/y_project/RuoYi-Vue.git,利用git很好下载哦打开idea在git中点击克隆输入上述git链接,即可二、配置数......
  • 基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源
          博主介绍:硕士研究生,专注于信息化技术领域开发与管理,会使用java、标准c/c++等开发语言,以及毕业项目实战✌    从事基于javaBS架构、CS架构、c/c++编程工作近16年,拥有近12年的管理工作经验,拥有较丰富的技术架构思想、较扎实的技术功底和资深的项目管理经......
  • springboot+vue+mybatis文化遗产管理系统+PPT+论文+讲解+售后
    信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多......
  • 基于SpringBoot的校园志愿者管理系统
    你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架工具:MyEclipse、Tomcat系统展示首页个人中心志愿者管理活动信息管理摘要随着信息化时代的到来,管理系统趋向于智能化、系统化。校园志愿者管理系统的......
  • 基于SpringBoot的校园疫情防控系统
    你好,我是专注于计算机科学与技术的研究者。如果你对我的工作感兴趣或有任何问题,欢迎随时联系我。开发语言:Java数据库:MySQL技术:SpringBoot框架,B/S架构工具:Eclipse,Maven系统展示首页疫情动态管理防疫教育管理健康打卡管理摘要本文介绍了一个基于SpringBoot框......
  • 【java深入学习第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理与应用
    前言在使用MyBatis进行持久层开发时,通常会与Spring框架集成,以便更好地管理事务和依赖注入。在MyBatis-Spring集成中,SqlSession是一个非常重要的概念。本文将详细介绍SqlSessionTemplate和SqlSessionDaoSupport,并提供相关的代码示例。一、SqlSessionTemplateSqlSessio......
  • 使用Spring Boot集成Sentinel
    使用SpringBoot集成Sentinel大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、什么是Sentinel?Sentinel是阿里巴巴开源的一款流量控制、熔断降级的框架,能够帮助我们解决分布式系统中的流量管理问题。在微服务架构中,服务间的调用复杂度高,Sentinel可以......