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

news2024/11/15 13:41:16

目录

一:代码书写现状

 二:核心思想


一:代码书写现状

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

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

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

          如上所示,耦合度是减小了,但是存在着问题:只存在着接口,一运行的话,那么就会报异常,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.coloradmin.cn/o/130940.html

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

相关文章

NLP学习笔记(五) 注意力机制

大家好,我是半虹,这篇文章来讲注意力机制 (Attention Mechanism) 在序列到序列模型中的应用 在上一篇文章中,我们介绍了序列到序列模型,其工作流程可以概括为以下两个步骤 首先,用编码器将输入序列编码成上下文向量&a…

费控产品之易快报洞察解析

1.费控行业洞察 1.1 概念及管理范畴界定 费控业务的本质是企业支出的管理,因此分析费控要从企业支出管理的宏观范畴来看,企业支出主要包括两方面,一个是企业成本,一个是期间费用。期间费用就是我们常说的管理费用、销售费用和财务…

Centos7的安装与模板机的制作

Centos7的安装与模板机的制作 1.安装环境准备 1.VMware Workstation 2.centos7镜像 本文用的VMware版本为16.2.1 build-18811642 2.开始安装 话不多说,直接上图 3.模板机制作 1.查看防火墙的运行状态 firewall-cmd --state防火墙目前正在启动中 2.关闭防火墙…

STM32——STM32简介与创建工程

文章目录一、stm32简介stm32MCU:ARM:命名规则:片上资源/外设:系统结构:引脚的定义功能引脚介绍:最小系统引脚介绍:电源引脚介绍:启动配置最小系统电路二、软件安装三、新建工程固件库…

2022年专业408的算法题

文章目录0 结果1 题目2 思路3 实现3.1 思路13.2 思路二0 结果 1 题目 2 思路 1,首先明确二叉搜索树的定义:任何一个节点大于其左子树中的全部结点,小于其右子树中的全部结点。中序遍历二叉搜索树得到一个升序序列。2,明确题目中给…

【微信小程序入门到精通】— 微信小程序实现多页面切换(tabBar)

目录前言一、tabBar 介绍二、实操(创建 tabBar )2.1 基本配置2.2 详细配置总结前言 对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢? 为此我特意开设此专栏,在我学习的…

mysql索引机制实现及自适应hash索引

一、介绍   哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1)。常用于连接(join)操作,如Oracle中的哈希连接(hash join)。 InnoDB存储…

canopen11-sdo-40读取命令

源码 参考文件 1、SDO介绍 就对象而言,主机要访问节点词典的数据,因此主机是client客户端,节点是server服务器。上传与下载是对服务器来说的(这点和常识有点不太一样)。因此,上传指的是服务器发送数据给客户端,下载是客户端给服务器数据。 我们这里要用主机访问节点服…

Linux多进程编程之exec函数族使用

Linux多进程编程之exec函数族使用1.exec函数族是什么2.execl函数具体使用3.execlp4.exec后面不同字母所代表的含义1.exec函数族是什么 顾名思义,它并不只是一个函数,而是以exec开头的六个函数,并且是没有exec这个函数的(就像TCP/…

几行代码演示linux kernel、libc、userSpace app的关系

问一:编译出来的Linux内核镜像(".\build\arch\arm64\boot\Image"),可以单独运行吗?答案是能,但是加载完就提示panic,然后死掉了。 原因是: 内核代码加载完后,一定要切换到低权限模式…

Wireshark TS | Packet Challenge 之 HTTP 案例分析

前言 来自于 Sharkfest Packet Challenge 中的一个数据包案例,Sharkfest 是 Wireshark 官方组织的一年一度的大会,致力于在 Wireshark 开发人员和用户社区之间分享知识、经验和最佳实践。印象中早期是一年一次,近几年发展成一年两次&#xf…

我的2022年终总结

目录 1 序 1 2 工作 1 3 业余 1 3.1 AI 1 3.2 数学小插曲 3 3.3 金融投资 3 4 生活 4 5 最后 4 1 序 老婆大人每年这个时候都要写年终总结,现在也正在写;CSDN也发起了年终征文活动;各大app也各种年度大数据总结。我好像还是第一次写年终总…

两两交换链表中的节点 -- 虚拟头节点

24两两交换链表中的节点 – 虚拟头节点 通过本题可以: 增加对虚拟头节点的理解。 加强对链表这一基本数据结构的基本操作的理解。 1. 交换过程: 如图,假设链表如图所示。 为了减少对头节点的单独讨论,这里采用虚拟头节点进行…

Allegro如何显示走线和铜皮的网络名操作指导

Allegro如何显示走线和铜皮的网络名操作指导 在做PCB设计的时候,如果可以实时看到走线和铜皮的网络名,对于设计有很大帮助,如下图 具体操作如下 选择Set-up-user preferences选择Display

Vue 总结一(简介 基本语法)

目录 Vue 是什么 与其它 JS 框架的关联 Vue 周边库 MVVM模型 怎么用 Vue模板语法有2大类: 数据绑定 data 事件 v-on methods 计算属性 computed 监视属性 watch computed和watch之间的区别: 条件渲染 v-if v-show Vue 是什么 一个动态构建用…

sql根据团队树一级一级汇总统计

1、需求描述 最近碰到了一个需求,是要统计各个团队的员工的销售金额,然后一级一级向上汇总。 架构团队树是类似于这种样子的,需要先算出每个员工的销售金额,然后汇总成上一级的团队金额,然后各个团队的销售总金额再往上…

京东技术发展简史

文章目录前言京东发展历程京东商城技术的演进京东自研技术分布式数据库StarDB京东云移动端Flutter在京东的实践大数据咚咚架构ShardingSphere京东人物参考“京东可以高速发展到今天的规模的原因,其中最核心的是坚持“倒三角”战略:建立出色的团队&#x…

转义字符与strlen(),sizeof()在一起的注意事项

转义字符与strlen(),sizeof() 1. 转义字符每个人都知道是怎么一回事儿,转义字符顾名思义就是转变意思。 2. 首先转义字符肯定是一个字符,不是两个字符,更不用说是数字了,就是字符。 3. 当用strlen()统计字符串长度时或者用sizeo…

2022年度回顾

这一年是不平凡的一年,换了公司,新公司频繁出差,去了临沂,去了河南,去了唐山,去了福鼎,当中最印象深刻的还是河南,项目万分火急,在疫情隔绝的10月份毅然决然的前往河南安…

如何稍微优雅滴完成博文访问计数[SpringBoot+redis+分布式锁]

文章目录前言背景朴素做法Redis方案流量统计接口演示自定义注解计数实现防刷加锁完整代码数据一致性分析自定义注解返回值分析解决方案总结前言 okey,我们来收尾一下,这公历纪年2022年12月31日。这是本年度的最后一篇博文。那么这篇博文主要是用来实现博文的一个访…