Spring IOC and DI

news2024/9/20 7:49:51

1.什么是IOC

(1)在Spring的MVC中我们学习了,让我们知道了将对象如何交给Spring进行管理类

(2)Spring是一个开源框架,是包含众多方法容器的IOC容器

(3)那么什么事IOC,我们可以将他说为,控制翻转的容器(IOC),在我们前面的文章中Spring,用@Contraller和RestContraller将对象交给Spring进行管理,这个就是IOC思想。

(4)IOC控制翻转可以理解为以前你开车用人,现在用人工智能,将你传统的控制车这个对象进行打破。这个就死IOC思想

2.传统思想对其进行开发

(1)在传统的思想中,如果我们要造一辆车,要先造出轮子,根据轮子设计底盘车身,然后组装成一辆车。

代码示例

代码包:

 Bottom类

car类

 Framword类

 NewCarExample类

 Tire类

以上是用传统的思想进行开发,这样的开发是不好的,因为每个类的耦合性是非常高的,如果我想改轮胎尺寸的话就会发现整个代码的体系都要进行修改。 如下图所示。

修改完毕进行运行结果。 

 3.IOC思想进行开发

可以看到传统思想进行开发是非常的不好的,一旦增加需那么整个系统的代码都要进行修改.耦合性非常的高.这时候就要采用IOC的思想来对程序进行开发.也就是控制反转,其中要先声明一点,在传统的开发过程中,car是总的控制.:Car -> Framework -> Bottom -> Tire,

在接下来进行IOC的开发中,我会通过对象的注入来控制整个程序。

各类代码如下

NewCarExample类

Bottom类

 Car类

FranmWork类代码 

Tire是最基本对的类不用修改(在新的思想中还能给Tire给予不同的属性)

 4.IOC控制翻转容器

1.我们在了解了IOC的思想以后就可以明白IOC控制容器,这个可以将容器中的对象进行集中的管理,也就是Spring干的事情,其中我们要知道IOC是一种思想不是一种模型。

在我们知道IOC的概念以后,那么这个容器的最大作用就是拿和取东西

4.1 @Controller、@Service、@Repository、@Component、@Configuration这些都是可以注入元素

其中我们注意的是除了Controller这个其他在源码中并没有很大的区别

5.bean对象的命名

官方给出的解释(下面是网址)

Bean Overview :: Spring Framework

在我们将对象交给Spring的时候,Spring就已经在内部将对象给实例化好了并对其取了名称

类名: UController, Bean的名称为: UController

类名: AManager, Bean的名称为: AManager

(1)首先要先从Spring框架中获取对象的上下文,然后根据命名规则来获取对象

如果你的对象前两个字母大写那么就是原来的名称如果不是,那么就是小驼峰的命名方式

如上的三个输出的地址是一样的那么就说明这个获取的是同一个对象,

(2)一个类中有多个对象的三种不同的获取方式。 下面124三种是用的最多的。

(3) 上面的第四种方法

 在上面的图片中,先要获取Spring容器的搭载环境,当然这个搭载环境也是报扩我们交给Spring管理的类的。也就是ApplicationContesxt这一行代码,然后获取到这个对象这个是第四个方法,这些方法获取到的对象都是同一个。

6.程序接管的注意事项

(1)程序被Spring接管的时候默认路径是启动类的路径(启动类的目录包括子目录)

这个要用五大注释来和@bean这个注释进行使用

7.依赖的注入(三种方式)

在Spring框架中有三种对依赖的注入方式

属性的注入,构造方法的注入,setter方法的注入

7.1构造方法的注入

(1)当只有一个构造方法的时候不需要用@Autowird

(2)如果有多个构造函数,没有使用@Autowird进行注入,那么就会默认使用无参的构造方法,使用了@Autowird,那么就会使用固定的构造方法。

7.2 Setter方法的注入

(1)第一种方式在构造方法中进行赋值

(2)在定义中进行初始化

(3)优缺点对比

 7.3Autowird注入的注意特点

(1)当使用Autowird对对象进行属性的注入的时候

(2)根据名称和类型进行查找,名称为Userinfo 类型为UserInfo

     首先是先到类中找到这个属性进行注入,如果名称查不到那么就会进行报错

7.4@Autowird和@Resouse注入的区别

这两个注解的区别就是,第一个Autowird是由Spring框架进行管理的,然后第二个@Resouse这个是jave的jdk框架自带的注入

其中Aurowied这个是用类的对象进行注入

后面Resouse这个是用名称进行注入

总的来说@Recouse这个是支持更多的参数进行注入

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

条理最清楚的最常用的 Git 管理指令

基础提交操作 git init # 将本地文件夹变为一个git仓库 git clone #将远程仓库克隆到本地 git log 查看提交记录 git fetch 命令更新remote索引,解决git branch -a没有最新分支的问题 git add # 将单个文件从工作区添加到暂存区 git add . # 将所有文件添加到暂存…

Win11(23H2)Copilot电脑重启会修改注册表解决办法

基础条件:科学上网 参考这两篇文章开启Copilot 参考一 参考二 成功后,如果你电脑每次重启,Copilot图标都会消失,那就是注册表被修改了,可以用一个取巧的办法解决 解决办法如下: 1. 桌面上新建一个文本&…

2024年【烟花爆竹经营单位主要负责人】找解析及烟花爆竹经营单位主要负责人复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 烟花爆竹经营单位主要负责人找解析参考答案及烟花爆竹经营单位主要负责人考试试题解析是安全生产模拟考试一点通题库老师及烟花爆竹经营单位主要负责人操作证已考过的学员汇总,相对有效帮助烟花爆竹经营单…

vue3引入模块报错:无法找到模块“xxx”的声明文件

使用vue3ts导入vue文件的时候,报错:找不到模块“./XXX.vue”或其相应的类型声明 这是由于:Vue 文件并不是标准的 JavaScript 模块,因此 TypeScript 需要通过这种声明方式来理解和处理这些文件 我是使用vite创建的项目&#xff0…

工作随记:oracle中偶发遇到存储过程编辑,删除等卡死问题

文章目录 一、查询session是否占用二、通过对象名称定位对应SID三、通过对应的SID查询session信息四、kill掉session 最近有几个客户也询问过:我的存储过程怎么编译、调试有时候就卡死不动了,而且还没办法删除,本次又碰到实际情况&#xff0c…

【NLP】文本处理的基本方法【jieba分词、命名实体、词性标注】

文章目录 1、本章目标2、什么是分词3、jieba的使用3.1、精确模式分词3.2、全模式分词3.3、搜索引擎模式分词3.4、中文繁体分词3.5、使用用户自定义词典 4、什么是命名实体识别5、什么是词性标注6、小结7、jieba词性对照表⭐ 🍃作者介绍:双非本科大三网络…

打卡第34天------动态规划-01背包

我目前刷leetcode上的题的时候,不仅每天按照代码随想录的算法训练营的进度来刷题,也会自己开始在leetcode上刷题了,有些简单的题目,不用看题解就能做出来了,这也是一种进步呀。希望可以尽快找到下家工作单位&#xff0…

前端全屏错误窗错解决方案

如果你的项目全屏错误窗报错,可以在vue.config.js中进行设置 const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {client: {overlay: false,},} })

doxygen制作接口文档

系列文章目录 文章目录 系列文章目录前言一、下载二、安装三、代码注释四、使用doxygen生成文档 前言 每次手动写接口文档太痛苦了,现在福利来了–doxygen Doxygen是软件开发中广泛使用的文档生成器工具。它自动从源代码注释生成文档,解析有关类、函数和…

上播狂卖下播全退!用户抛弃直播间,网红们疯狂刷单注水……

最近,直播带货行业瓜好像多的有点吃不动了!‍ 头部的一哥二哥三哥们,卖课的卖课、分家的分家,吵架的吵架……好不热闹。 就好比国民女婿董宇辉,在和东方甄选、俞敏洪周旋了小半年后,终于还是从打工人变成…

【送激活码,免费升级】GuitarPro发布8.1.3新版 guitar pro最新版中文官网下载 guitar pro激活码

打谱神器 Guitar Pro 迎来了 2024 最新版!所有购买过 Guitar Pro 8 的用户,现在就可以免费升级 V8.1.3 了,您可以通过软件内的升级提醒进行升级,或者直接下载下面的新包覆盖安装。 Guitar Pro8.13最新安装包下载(Win&…

【JVM】深入JIT优化机制

1.JIT优化技术 在将高级语言转化为计算机可识别的机器语言时,常用的两种方式是编译和解释。Java在编译过程中,首先将代码编译成字节码。但是,字节码并不能直接在机器上执行。因此,JVM中内置了解释器(Interpreter&…

汇编语言1 - 什么是汇编语言?

1. 什么是汇编语言? 1.1. 汇编语言的定义1.2. 汇编语言与机器语言 1.2.1. 相同点1.2.2. 不同点 2. 汇编语言的主要特点3. 汇编语言的基本组成4. 汇编器 4.1. 主要工作流程4.2. 常见的汇编器 4.2.1. NASM(Netwide Assembler)4.2.2. MASM&…

PPT免费图片素材网站分享

一、Pixabay 网址:https://pixabay.com/ 图片类型:高清、免费、商用 使用方法:找到想要的图片之后,右键复制之后粘贴到PPT即可使用。同时,点击下载可以找到不同尺寸的PPT素材 二、花瓣网 网址:https://…

B树和B+树的插入、删除

1. B树 1.1 B树的定义 树也称树,它是一颗多路平衡查找树。我们描述一颗树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,用字母表示阶数。当取时,就是我们常见的二叉搜索树。 一颗阶的树定义如下: 每…

“卖水人”的生意经,要比机器人厂商更懂机器人

技术公司的生存法则。 生态链中每个角色都有自己的生存法则。对于机器人产业链中的技术“卖水人”,它的核心生存法则除了要闷头搞技术,更重要的是要比机器人厂商更懂机器人,这不仅很大程度决定了自身的技术路线,更决定了能否切中…

labelme标注的图像分割json文件转图片格式

label标注的标签是json格式,会对选择的区域进行打点标记,所有的点围成不规则的多边形区域,中间的部分就是分割的区域 这里编写了python脚本,可以把json文件转为图片格式,这里是png格式 目标摆放如下 转化结果如下&…

论文精读1

Equivariant Pretrained Transformer for Unified Geometric Learning on Multi-Domain 3D Molecules 核心公式: 论文导图 创新在统一分子建模和块级去噪预训练。

vue3中 ref 和 reactive 的区别

相同:均是声明响应式对象。且声明的响应式对象是深层的 1. 数据类型不同:ref用于包装JavaScript基本类型的数据(如字符串、数字、布尔值等),而reactive可以用于包装JavaScript对象和数组等复杂类型的数据。 2.访问方式…

医疗器械维修行业的惊人真相!

在医疗领域,医疗器械维修行业有着不为人知的惊人真相。 其一,维修人才极度稀缺。医疗器械的技术不断革新,复杂程度日益提高,然而专业维修人员的数量增长却远远跟不上。这导致一些设备故障无法及时修复,影响医疗服务的…