SpringBoot控制反转和依赖注入

 

目录

 

一、内聚和耦合

二、分层解耦

三、具体实现

四、bean的组件扫描

五、bean注入


一、内聚和耦合

        在了解分层解耦的概念之前我们我们要去先了解一下内聚和耦合。内聚:通常将的是软件中各个模块之间的功能联系。耦合衡量软件各个模块之间的依赖、关联的程度。一个项目中各个模块之间相互联系越紧密则耦合性越高,模块的独立性就越低,反之亦然。软件设计的原则:高内聚低耦合。在上一篇文章我们搭建了一个简单的三层架构。

实现了service层和dao层的耦合。

实现了service和controller层的耦合。

二、分层解耦

        从上面我们可以看出各个模块之间存在一些耦合,我们应该如何进行解耦呢?如果直接删除上述高亮显示代码会报错,我们会提供一个容器去存储创建的对象,我们从容器中取需要的对象。对象该如何交给容器进行管理?容器怎么提供所依赖的资源?涉及到一些新的概念:控制反转、依赖注入和Bean对象。

        控制反转:Inversion of Control,简称IOC。对象创建控制权由程序自身转移到外部(Spring容器)。

        依赖注入:Dependency injection,简称DI。容器为应用程序提供运行时,所依赖的资源。

        Bean对象:IOC 容器中创建、管理的对象。

三、具体实现

@Component:指定一个普通的Bean,可以作用在任何层次。
@Controller:指定一个控制器组件Bean。
@Service:指定一个业务逻辑组件Bean。
@Repository:指定一个数据访问组件Bean。
@Scope:指定 Bean 实例的作用域。
@Value:指定Bean 实例的注入值

        在声明bean 的时候,可以通过value属性来指定Bean的名字,如果没有指定,默认为类名首字母小写。在springboot集成web开发中,声明控制器bean只能用@controller。

四、bean的组件扫描

        前面说到的bean的四大注解(@Repository、@Service、@Controller和@Component),要想生效还需要被注解@ComponentScan扫描。@ComponentScan注解虽然没有显示配置,但是实际上已经包含在启动类声明注解@SpringBootApplication中,默认的扫描范围是启动类所在包(com.example.demo)及其子包。

如果需要扫描的com.example.demo之外的包,可以通过@ComponentScan进行设置@ComponentScan({“dao”,"com.example.demo"}),这种方式不推荐使用。推荐放在启动类所在包。

五、bean注入

       @Autowired:指定要自动装配的对象。默认按类型进行装配,换一句话说就是去IOC容器中找指定类型的bean对象,然后完成注入。如果有两个类型一样的bean会报错。

        可以通过一下几种方式进行解决:

@Primary:用于标记一个或多个Bean作为首选的候选者。

@Qualifier:指定要自动装配的对象名称,通常与Autowired 联合使用。

@Resource:指定要注入的对象,默认根据名称进行区分。

    

@Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。@Autowired默认是按照类型注入,而@Resource默认是按照名称注入。

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

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

相关文章

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中,办公软件的重要性不言而喻。从文档处理到电子表格分析,再到演示文稿制作,强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件,一直以来都受到广大用户的关注与喜爱…

OpenAI推出自我改进AI- CriticGPT

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如何进行黄金期货日内波段交易-EE trade

日内波段交易是一种在单个交易日内抓取较大波段趋势的方法,旨在利用市场的短期波动获取利润。黄金期货市场由于其高波动性和高杠杆性,成为日内波段交易的理想选择。以下是黄金期货日内波段交易的详细策略和方法。 一、日内波段交易整体设计思想 1. 顺应…

【Linux】生物信息学常用基本命令

wget网址用于直接从网上下载某个文件到服务器,当然也可以直接从网上先把东西下到本地然后用filezilla这个软件来传输到服务器上。 当遇到不会的命令时候,可以使用man “不会的命令”来查看这个命令的详细信息。比如我想要看看ls这个命令的详细用法&…

独立开发者系列(12)——下单与支付

做业务有个绕不开的业务逻辑,就是支付。这里总结一个基础的支付电商逻辑闭环流程,完成支付基础体系的实现。这里假定我们要实现的是一个独立的电商平台上允许用户在平台充值,其他的类似多多购物或者淘宝购物的流程逻辑。 数据表结构的逻辑设…

使用uniapp编写微信小程序

使用uniapp编写微信小程序 文章目录 使用uniapp编写微信小程序前言一、项目搭建1.1 创建项目方式1.1.1 HBuilderX工具创建1.1.2 命令行下载1.1.3 直接Gitee下载 1.2 项目文件解构1.2.1 安装依赖1.2.2 项目启动1.2.3 文件结构释义 1.2 引入uni-ui介绍 二、拓展2.1 uni-app使用uc…

【高考】人生规划指南

作为一个正处在这个选择的十字路口的高考考生,我认为在选择专业和学校时,要根据自己的具体情况和个人目标来权衡。首先,我认为专业是首要考虑因素。因为专业是直接决定未来职业发展方向的,如果不喜欢或者不适合的专业选择&#xf…

数字时代的文化革命:Facebook的社会影响

随着数字技术的飞速发展和互联网的普及,社交网络如今已成为人们日常生活中不可或缺的一部分。在众多社交平台中,Facebook作为最大的社交网络之一,不仅连接了全球数十亿用户,更深刻影响了人们的社会互动方式、文化认同和信息传播模…

前端面试题(基础篇十二)

一、link标签定义、与import的区别 link 标签定义文档与外部资源的关系。 link 元素是空元素,它仅包含属性。 此元素只能存在于 head 部分,不过它可出现任意数。 link 标签中的 rel 属性定义了当前文档与被链接文档之间的关系。常见的 stylesheet 指的是…

Python酷库之旅-第三方库openpyxl(15)

目录 一、 openpyxl库的由来 1、背景 2、起源 3、发展 4、特点 4-1、支持.xlsx格式 4-2、读写Excel文件 4-3、操作单元格 4-4、创建和修改工作表 4-5、样式设置 4-6、图表和公式 4-7、支持数字和日期格式 二、openpyxl库的优缺点 1、优点 1-1、支持现代Excel格式…

pdf已加密如何解除?解密密码的两个方法【可加密】

电脑文件加密的目的就是保护重要信息,防止数据泄露。如果需要解除密码,应该如何操作呢?pdf已加密如何解除?本文整理了以下两种解除文件方法,希望能够帮到有需要的朋友们! 方法一、使用金舟文件夹加密大师解…

vue3+vite+nodejs,通过接口的形式请求后端打包(可打包全部或指定打包组件)

项目地址https://gitee.com/sybb011016/test_build 打包通过按钮的形式请求接口,让后端进行打包,后端使用express-generator搭建模版。前端项目就在npm init vuelatest基础上添加了路由 如果只想打包AboutView组件,首先修改后端接口。 //打…

Open3D (C++) 点云旋转至主成分空间

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 首先使用主成分分析法计算出点云的特征值与特征向量,然后根据点云的特征向量计算出点云与主成分空间之间的…

CocosCreator构建IOS教程

CocosCreator构建IOS教程 添加include: Header Search Paths:拖拽include过来 添加SoundEngine: Header Search Paths: 把SoundEngine POSIX Common 三个文件夹拖拽到里面去

如何将 ONLYOFFICE 文档 Linux 版更新到 v8.1

本指南将向您展示如何将 ONLYOFFICE 文档 Linux 版本更新到最新 8.1 版本。 ONLYOFFICE 文档是什么 ONLYOFFICE 文档是一个功能强大的文档编辑器,支持处理文本文档、电子表格、演示文稿、可填写表单、PDF 和电子书,可多人在线协作,支持 AI 集…

软件设计师笔记-操作系统知识(二)

线程 以下是关于线程的一些关键点: 线程是进程中的一个实体:进程是操作系统分配资源(如内存空间、文件句柄等)的基本单位,而线程是进程中的一个执行单元。多个线程可以共享同一个进程的地址空间和其他资源。线程是CP…

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址,选择与电脑系统相对应的版本;博主已经上传资源,或者点此直接免费下载,本次演示版本为8.14.1。 注意: Elasticsearch 5 需要 Java 8 以上版本;…

菜籽桌面4.5.0~4.5.1常见问题解答

目录 如何刷机? 刷机失败? 无法方控? 无法画中画? 原车音乐跟我安装的音乐一起播放? 原车音乐停了,我安装的软件也跟着没声音了? 调节声音时忽大忽小? 怎么安装软件? 软件…

探究互联网领域知识,解密数字化时代神秘面纱

随着信息时代的不断发展,互联网的发展呈现出爆炸式的增长,以至于引起广泛的关注和深入的探究。互联网作为一个庞大的网络体系,涵盖着无穷无尽的信息和知识,其背后的科技和应用已经改变了人们的生活,产生了翻天覆地的变…

锐捷网络闪耀CVPR 2024,外观异常检测方案斩获世界认可!

近日,锐捷网络在“视觉异常检测和创新性检测2024挑战赛”(Visual Anomaly and Novelty Detection 2024 Challenge,简称VAND)的少样本逻辑/结构异常检测赛道(VAND 2.0赛道2)中荣获第二名,并在计算机视觉顶级会议CVPR 2024上展示了这一成果&…