首页 > 其他分享 >Spring基础 - Spring核心之控制反转(IOC)

Spring基础 - Spring核心之控制反转(IOC)

时间:2024-06-08 18:00:15浏览次数:24  
标签:IUserDao Spring 实现 反转 new IoC IOC

Spring基础 - Spring核心之控制反转(IOC)

IoC (Inversion of control )
IoC 不是 Spring 提出来的,它们在 Spring 之前其实已经存在了,只不过当时更加偏向于理论。Spring 在技术层次将这个思想进行了很好的实现。

 

什么是 IoC?

IoC (Inversion of Control )即控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。

例如:现有类 A 依赖于类 B

传统的开发方式 :往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来使用

IoC 思想的开发方式 :不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。

从以上两种开发方式的对比来看:我们 “丧失了一个权力” (创建、管理对象的权力),从而也得到了一个好处(不用再考虑对象的创建、管理等一系列的事情)


为什么叫控制反转?

控制 :指的是对象创建(实例化、管理)的权力

反转 :控制权交给外部环境(IoC 容器)

IoC 解决了什么问题?I

IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相关资源。这样有什么好处呢?

1)对象之间的耦合度或者说依赖程度降低;

2)资源变的容易管理;比如你用 Spring 容器提供的话很容易就可以实现一个单例。
例如:现有一个针对 User 的操作,利用 Service 和 Dao 两层结构进行开发在没有使用 IoC 思想的情况下,Service 层想要使用 Dao 层的具体实现的话,需要通过 new 关键字在UserServiceImpl 中手动 new 出 IUserDao 的具体实现类 UserDaoImpl(不能直接 new 接口类)。

很完美,这种方式也是可以实现的,但是我们想象一下如下场景:开发过程中突然接到一个新的需求,针对IUserDao 接口开发出另一个具体实现类。因为 Server 层依赖了IUserDao的具体实现,所以我们需要修改UserServiceImpl中 new 的对象。如果只有一个类引用了IUserDao的具体实现,可能觉得还好,修改起来也不是很费力气,但是如果有许许多多的地方都引用了IUserDao的具体实现的话,一旦需要更换IUserDao 的实现方式,那修改起来将会非常的头疼。

什么是DI?

依赖注入是 IoC 的一种实现方式

依赖注入可以通过set()方法实现。但依赖注入也可以通过构造方法实现

 

参考链接:https://javaguide.cn/system-design/framework/spring/ioc-and-aop.html

标签:IUserDao,Spring,实现,反转,new,IoC,IOC
From: https://www.cnblogs.com/hld123/p/18238816

相关文章

  • Spring AOP(实现,动态原理)详解版
    SpringAOP1.什么是AOP?1.1引入AOP依赖1.2编写AOP程序2.SpringAOP核⼼概念2.1切点(Pointcut)2.2连接点(JoinPoint)2.3通知(Advice)2.4切⾯(Aspect)3.通知类型3.1顺序3.2切⾯优先级@Order3.3⾃定义注解@MyAspect4.SpringAOP原理5动态代理怎么实现5.1JDK动......
  • SpringBoot 快速实现 api 加密!
    在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。https://gitee.com/isuperag/rsa-encrypt-body-spring-boot项目介绍该项目使用RSA加密方式对API接口返回的......
  • SpringBoot热部署设置
    在使用SpringBoot进行开发过程中,我们往往会对代码进行反复修改并对项目进行部署查看效果,这时反复重启SpringBoot会很麻烦,因此使用热部署是提高开发效率的必备插件——“spring-boot-starter-test”<!--SpringBoot热部署依赖--><dependency> <groupId>org.springframew......
  • 【计算机毕业设计】springboot287基于javaEE的校园二手书交易平台的设计与实现
    信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容......
  • 【计算机毕业设计】springboot283图书商城管理系统
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本图书商城管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达......
  • 【计算机毕业设计】springboot001基于SpringBoot的在线拍卖系统
    随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、留言板管理、系统管理,用户;首页、个人......
  • 【计算机毕业设计】springboot002基于springboot的医护人员排班系统
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了医护人员排班系统的开发全过程。通过分析医护人员排班系统管理的不足,创建了一个计算机管理医护人员排班系统的方案。文章介绍了医护人员排班系统的系统分析部分,包括可行性分析......
  • 【计算机毕业设计】springboot003图书个性化推荐系统的设计与实现
    本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述图书个性化推荐系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个......
  • SpringBoot高手之路jdk动态代理
    文章目录JDK动态代理基于jdk的动态代理Aop底层就是基于动态代理实现的实现代码先写代理对象工具JDK动态代理基于jdk的动态代理业务需求通过动态代理技术,对service层的方法统计执行时间–创建代理对象Aop底层就是基于动态代理实现的jdk动态代理技术是基于接口......
  • SpringAMQP使用管理RabbitMQ的五种消息模型
    使用SpringAMQ实现五种消息队列模型1.普通队列2.工作队列(WorkQueue)发布订阅=>根据交换机的不同分为三种3.订阅模型之Fanout(广播)4.订阅模型之Direct(路由)5.订阅模型之Topic(话题)使用前导:1.在生产者和消费者项目上分别导入RabbitMQ依赖<!--AMQP依赖,包含RabbitMQ-->......