Spring 核心概念 IOC/DI IOC容器 Bean

news/2024/11/17 22:14:26/

目录

一:代码书写现状

 二:核心思想


一:代码书写现状

          常规操作如上,但存在着问题,将项目上线后,需要将数据层进行更换,更换如下:

 数据层更换后,业务层也需要进行更换,更换如下:

            数据层和业务层的代码都进行了更换,那么源码也需要重新编译,重新测试,重新部署,重新发布,这些工作重新进行,那么成本也是会增加的,这些原因终究只有一条:由于我们在类里面进行了其他方法的实现,导致代码的耦合度提高。我们代码编写的原则就有一条,要追求低耦合。所以,在这里存在着一个问题,这里的耦合度过高,我们要想办法把这里的耦合度减小,既然是在业务层中编写代码将耦合度提高的,那么我们不如在这里不写,来将耦合度减小,实现代码如下:

          如上所示,耦合度是减小了,但是存在着问题:只存在着接口,一运行的话,那么就会报异常,NullPointerException异常,没有实现对象,那么我们要让程序运行怎么办,这里不就是没有实现对象而导致异常,你不就是要一个对象吗?你不要写对象了,我直接给你一个对象不就能让程序运行了嘛,这就是使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象思想,这样的问题解决方案思想被称为IOC( Inversion of Control):控制反转, 对象的创建控制权由程序转移到外部,这种思想称为控制反转

 二:核心思想

lOC思想

        Inversion of Control, 控制反转, 强调的是原来在 程序中创建Bean的权利反转给第三方。

        使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转

  • 问: 这种思想与Spring有什么关系呢?
  • 答:Spring技术对 lOC思想进行了实现

            Spring将这种思想给完成实现了,怎么做到的呢?其实也就是Spring提供了一个容器,称为IOC容器,用来充当IOC思想的"外部"。

   原来代码写法:

  现在代码写法:

  IOC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean

         如图所示,IOC容器帮我们将service和dao层创建好了后,代码能成功运行起来吗?答案是不行,因为service的运行是依赖于dao的

 既然serviec是依赖于dao来运行的,巧了的是service与dao都是在IOC容器中的,那么IOC容器就帮你将service和dao之间的依赖关系给绑定好,也就是这个dao对象,IOC容器直接给你,让你的程序能直接运行,这种思想称为DI思想

           Dependency Injection, 依赖注入, 强调的Bean之 间关系,这种关系第三方负责去设置。

           在容器中建立Bean与Bean之间的依赖关系的整个过程,称为依赖注入

        介绍完 Spring 的 IOC 和 DI 的概念后,我们会发现这两个概念的最终目标就是 : 充分解耦 ,具体实现依靠 :

  • 使用IOC容器管理bean(IOC)

  • 在IOC容器内将有依赖关系的bean进行关系绑定(DI)

最终效果:

  • 使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系

http://www.ppmy.cn/news/8389.html

相关文章

spring boot 实现搜索引擎的设计思想

实现思路 索引构建模块 搜索模块 数据库模块 索引模块 对于搜索一个东西,我们很自然的能想到遍历去查找。比如我要查找一本书叫 《红楼梦》,那么我直接在所有结果中进行遍历查找,当我们找到书名为《红楼梦》的结果时,就代表我们…

俯瞰·明统一战争·北伐中原

目录 背景 北方战略位置、前三次北伐快速俯瞰 实施策略 第一阶段 第二阶段 第三阶段 影响 雪压枝头低,虽低不着泥。一朝红日出,依旧与天齐。 背景 元至正二十七年(1367年)四月,吴王朱元璋命中书右丞相徐达为征…

沸腾过程气泡成核OVITO渲染

《Lammps空间划分——识别气泡、三维裂隙》 根据博文对纳米气泡的筛选(获得select),本案例练习如何渲染气泡。 文章目录一、选择气泡(select)二、删除液体三、渲染液体四、巧妙利用原子半径大小五、气泡渲染并获得体积…

笑对过往、活在当下、期盼未来

哈喽大家好,我是阿Q。 去年今日,也是安静的午后,拿起铅笔在纸上寥寥草草的写下几个年终关键词,思索良久,迟迟未能下笔。 时至今日,年末将至,再次执笔已时隔一年,再不拿笔记录这转瞬…

【数据集6】全球人工不透水面积GAIA

全球人工不透水面积(lobal artificial impervious area, GAIA) 人工不透水区是表征建成区和城市范围的重要覆盖类型,特别是在较细的空间分辨率下。 1 简介 原理: 由Landsat卫星图像和辅助数据集生成,如夜间灯光数据…

CSS权威指南(一)CSS概述

文章目录1.元素2.引入样式表3.样式表4.媒体查询5.特性查询1.元素 (1)置换元素和非置换元素 置换元素,指用来置换元素内容的部分不由文档内容直接表示。比如img标签。非置换元素,元素的内容是由用户代理在元素自身生成的框中显示…

Rust入门(三):内存与指针

Rust内存回收 所有程序都必须管理其运行时使用计算机内存的方式。 一些语言中具有垃圾回收机制,比如说java; 一些语言需要程序员手动分配和释放内存,比如说c; rust采用了第三种方式,使用所有权管理系统来管理内存 …

分布式事务二阶段提交协议和三阶段提交协议

二阶段提交协议和三阶段提交协议都是分布式系统数据一致性问题解决方案。同时,这2种方案也不是百分之百可靠的,虽然这么说,但是也能极大的提高了一致性。有效解决分布式一致性问题的是Paxos算法。 一、二阶段提交(two phase comm…