Spring的核心概念

目录

1、控制反转(IoC)

什么是控制反转

IoC与IoC容器的关系

Spring框架的控制反转

2、Bean

注解:​​​

3、DI

4、总结


1、控制反转(IoC)

什么是控制反转

IoC(Inversion of Control,控制反转)是一种编程思想,其核心是将传统上由程序代码直接操控的对象调用权交给一个容器(外部实体),通过这个容器来实现对象的创建、装配和管理。在IoC中,对象的依赖关系不再由对象自身负责,而是由IoC容器来管理。

IoC的主要目的是降低代码之间的耦合度,提高代码的可维护性、可测试性和可扩展性。通过IoC,对象在被创建的时候,其依赖的对象的引用会被外界实体(IoC容器)注入到对象中,即依赖被注入到对象中。这种依赖注入的方式使得对象不需要关心其依赖项的具体实现,只需要关注其接口和功能,从而实现了对象之间的解耦。

IoC的实现方式多种多样,其中最常见的是依赖注入(Dependency Injection,简称DI)。依赖注入是指在创建对象时,将其依赖的其他对象(或依赖项)通过构造函数、属性或接口方法等方式注入到目标对象中。这样,目标对象就不需要负责自己的依赖项的创建和管理,而是由IoC容器来负责。

IoC与IoC容器的关系

IoC容器是实现IOC思想的具体工具或平台。没有IoC容器,也可以实现IOC思想,但可能需要更多的手动配置和代码编写。而IoC容器则通过自动化和配置化的方式,使得IOC思想的实现更加简单和高效。

在使用IoC容器时,通常会将对象的创建、配置和依赖注入等任务交给容器来管理,从而实现代码的解耦和复用。这样可以更加专注于业务逻辑的实现,而无需关心对象的创建和管理等细节。

Spring框架的控制反转

在Spring框架中,IoC(Inversion of Control,控制反转)是一种核心的设计思想,它降低了类与类之间的依赖程度,使得代码更加灵活和易于测试。通过IoC,Spring容器负责创建对象实例、管理对象的生命周期,并自动处理对象之间的依赖关系。

具体来说,Spring IoC容器实现了IoC思想,它负责对象的创建、装配以及生命周期管理。这意味着,开发者不再需要在代码中显式地通过new关键字来创建对象实例,而是将对象的创建和管理交给Spring容器来处理。IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。Spring容器会根据配置(通常是通过XML配置文件或注解)自动创建对象实例,并将它们装配在一起,形成完整的应用程序。

在Spring中,IoC的实现主要依赖于依赖注入(Dependency Injection,DI)机制。依赖注入是指Spring容器在创建对象时,将其所依赖的其他对象(也称为依赖项)注入到该对象中。这样,对象就不需要显式地创建其依赖项,而是由Spring容器负责创建和注入。IoC 的思想就是两方之间不互相依赖,由第三方容器来管理相关资源。

Spring提供了多种实现IoC的方法,包括:

  1. 注解方式:通过在类或方法上添加注解(如@Autowired、@Resource等),告诉Spring容器需要进行依赖注入的对象或方法。
  2. XML配置方式:在XML配置文件中配置bean的信息,包括bean的id、class、依赖关系等。Spring容器会读取这些配置信息,并据此创建和管理对象。
  3. 自动扫描方式:通过配置自动扫描的包路径,Spring容器会自动扫描指定包下的类,将其注册为bean,并进行依赖注入。

2、Bean

IOC容器的作用以及内部存放的是什么?

IOC容器负责对象的创建、初始化等一系列工作,其中包含了数据层和业务层的类对象。被创建或被管理的对象在IOC容器中统称为Bean,IOC容器中放的就是一个个的Bean对象。

在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring管理的Java对象,它是一个完整的对象,拥有属性和对应的方法。org.springframework.beansorg.springframework.context 这两个包是 IoC 实现的基础。

注解:​​​

@Component通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用
@Repository对应持久层即 Dao 层,主要用于数据库相关操作。
@Service对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
@Controller对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

@Component 注解作用于类,而@Bean注解作用于方法。

3、DI

依赖注入:在容器中建立bean与bean之间的依赖关系的过程。

当IOC容器中创建好service和dao对象后,程序能正确执行么?

不能,因为service运行需要依赖dao对象。IOC容器中虽然有service和dao对象,但是service对象和dao对象没有任何关系,需要把dao对象交给service,也就是要绑定service和dao对象之间的关系。像这种在容器中建立对象与对象之间的绑定关系就要用到DI(Dependency Injection)依赖注入。

IOC容器中哪些bean之间要建立依赖关系?

要根据业务需求提前建立好关系,如业务层需要依赖数据层,service就要和dao建立依赖关系。

4、总结

  • IOC:控制反转,控制反转的是对象的创建权。
  • DI:依赖注入,绑定对象与对象之间的依赖关系。
  • IOC容器:Spring创建了一个容器用来存放所创建的对象,这个容器就叫IOC容器。
  • Bean:容器中所存放的一个个对象就叫Bean或Bean对象。

IoC与DI的共同目标是充分解耦,具体实现是使用IoC容器管理bean。在IoC容器内将有依赖关系的bean进行关系绑定(DI) 。最终结果为:使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/624609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

01 Triton backend

1 整体架构 三部分组成: Triton backend tensorRT_backend、onnx_backend、tfs_backend、torch_backend **Triton model ** 不同的模型 **Triton model instance ** 模型实例 ![P2}5X%2ULV(2OAC$_OKOP.png 2 设计思路 需要实现七个接口: TRITON…

给定两点所能得到的数学关系

给定两点所能得到的数学关系 正文 正文 这里介绍一个基础问题,如果给定平面上的两个点的坐标,那么它们之间能够得到什么数学关系呢? ω arctan ⁡ y 1 − y 0 x 1 − x 0 x 1 − x 0 d cos ⁡ ω y 1 − y 0 d cos ⁡ ω d ( x 1 − x…

【 PowerJob 的使用 -分布式调度】

PowerJob 的使用 最近项目中使用了PowerJob做任务调度模块,感觉这个框架真香,今天我们就来深入了解一下新一代的定时任务框架——PowerJob! 简介 PowerJob是基于java开发的企业级的分布式任务调度平台,与xxl-job一样&#xff0…

内联函数+auto关键字(C++11)+指针空指针nullptr(C++11)

内联函数auto关键字(C11)指针空指针nullptr(C11)详解 内联函数概念特性 auto关键字(C11)auto简介auto的使用细则auto不能推导的场景 基于范围的for循环(C11)范围for的语法范围for的使用条件 指针空指针null…

什么是外呼系统?企业为什么使用ai电销外呼系统

说起ai电销外呼系统,或许有的人并不了解这是什么,但它却常常出现在我们的生活中,今天我们来看看什么是外呼系统,企业为什么使用ai电销外呼系统? 一、什么是外呼系统 外呼系统就是由系统自动拨打电话的,外呼…

WPF基础学习笔记

目录 基础知识: WPF的特点: WPF的优点 什么是XAML? 布局基础: 样式的应用: 控件模板(ControlTemplate): 数据模板(DataTemplate): 静态资源StaticRe…

Kasawaki川崎机器人故障维修

在当今的自动化工业领域,川崎工业机器人以其卓越的性能和可靠的工作效率赢得了广泛的赞誉。作为机器人的核心组成部分,伺服电机的作用至关重要。然而,就像所有机械设备一样,也可能会遭遇电机磨损或故障,需要适时的川崎…

如何为域名生成证书签发请求CSR

最近我们在Hostease购买了服务器产品,为了保障我们网站的安全,我们额外还购买了SSL证书产品。在Hostease技术客服的帮助下,我们成功签发了SSL证书。 在签发证书前需要生成一个证书签名请求CSR,证书签名请求(CSR)是一个包含有关你…

【计算机网络】http协议的原理与应用,以及https是如何保证安全传输的

HTTP 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织…

欣意无限信息技术有限公司邀您参观2024长三角快递物流展

参展企业介绍 郑州欣意无限信息技术有限公司成立于2017年,公司经营范围计算机网络技术开发、技术咨询、技术服务、技术转让:商务信息咨询服务;市场营销策划;设计、制作、代理、发布国内广告业务;电脑图文设计&#xff…

[IMX6ULL驱动开发]-GPIO子系统和Pinctrl子系统

目录 Pinctrl子系统的概念 GPIO子系统的概念 定义自己的GPIO节点 GPIO子系统的函数 引脚号的确定 基于GPIO子系统的驱动程序 驱动程序 设备树修改 之前我们进行驱动开发的时候,对于硬件的操作是依赖于ioremap对寄存器的物理地址进行映射,以此来达…

C++笔试强训day21

目录 1.爱丽丝的人偶 2.集合 3.最长回文子序列 1.爱丽丝的人偶 链接 简单叙述就是每个数的左右两边不能一个比他大,一个比他小。 反之,就是要让每个数的左右两边数都大于或者都小于他。 方法一:一开始我想复杂了,其实用试错法…

Pycharm使用Anaconda虚拟环境

一、前置 安装 Pychram安装 Anaconda,并配置虚拟环境 参考: Anaconda虚拟环境 anaconda虚拟环境pytorch安装 二、在Pycharm中使用Anaconda的虚拟环境 打开 Pycharm的命令行可以看到 Anaconda 的虚拟环境已经启动。 三、问题集合 (1&…

IDEA报错:java 找不到符号

IDEA报错:java 找不到符号,代码没问题,IDEA缓存也清理了也重新构建了就是不行 最后使用终极大法 -Djps.track.ap.dependenciesfalse

海外仓混合订单拣货策略:人工与海外仓系统的最佳搭配模式

根据订单高效拣货是任何海外仓都要面对的问题。只有当订单可以被高效,准确的拣货之后,才能继续走下面的物流流程,所以尽可能的缩短拣货时间,提升拣货精准度,才是提升订单交付率的最佳方法。 海外仓企业都在不断寻找&am…

直播预告-如何快乐学习亚马逊云科技AWS,玩游戏备考亚马逊云科技云从业者认证?

一边玩一边学习亚马逊云科技云技能,这么好的事尊的假的?本周六(5约11日)晚20点,亚马逊云科技UG云端夜话Night Talk活动精彩回归~ 本次亚马逊云科技UG云端夜话直播是什么? 小李哥这次将在多平台…

Redis-集群方案

文章目录 Redis集群方案是用来做什么的?Redis集群方案有哪些?主从复制集群哨兵(Sentinel)集群Cluster分片集群第三方集群方案 更多相关内容可查看 Redis集群方案是用来做什么的? Redis集群方案是用来解决单节点Redis的…

知识图谱开发日志

应用于应用环境的配置.测试.发布 假如你写了一个web,并且测试调试都没有问题 并且,你想发给你的朋友,导师,或者部署到远程云服务器上 那么,你需要配置相同的软件,比如数据库,web服务器,必要的插件,库,etc…但这并不一定能保证软件的正常运行,因为别人可能使用完全不同的操作系统…

什么是CCRC?做什么用的?

CCRC(中国网络安全审查认证和市场监管大数据中心)原名为中国网络安全审查技术与认证中心,也被称为中国信息安全认证中心(ISCCC)。 该中心是经中央机构编制委员会办公室批准成立的,其主要职责是依据国家法律…

springboot通过 EasyExcel.read()方法解析csv(excel)文件中的数据用list接收

springboot通过 EasyExcel.read()方法解析csv(excel)文件中的数据用list接收 文章目录 前言一、EasyExcel是什么?二、使用步骤1.引入库2.接收数据的实体类3.处理字典值ExcelDictConverter4.把文件中的数据解析出来放入…