各种依赖注入和分层解耦

news2025/1/18 3:27:50

分层解耦

三层架构

controller:控制层,接收前端发送的请求,对请求进行处理,并响应数据

service:业务逻辑层,处理具体业务的逻辑

dao:数据访问,负责数据访问操作,包括数据的增、删、改、查

流程为:

浏览器->controller(接收请求、响应数据)->service(逻辑处理)->Dao(数据访问)

内聚:软件中各个功能模块内部的功能联系

耦合:衡量软件中各个层/模块之间的依赖、关联程度

控制反转

Inversion Of Control 简称IOC 对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转

依赖注入

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

Bean对象

IOC容器中创建、管理的对象 称为bean

@Component表示将当前类交给IOC容器管理,称为IOC容器的bean

@Autowired表示运行时 IOC会提供该类型的bean对象,并赋值给该变量

Bean的声明

要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解

注解说明位置
@Conponent声明bean的基础注解不属于以下三类时用此注解
@Controller@Conponent的衍生注解标注在控制器类上
@Service@Conponent的衍生注解标注在业务类上
@Repository@Conponent的衍生注解标注在数据访问类上(由于mybatis整合,用的少)

注意:

声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名的首字母小写

使用以上四个注解都可以声明bean 但是在springboot集成的网页开发中,声明控制器bean只能用Controller

Bean组件扫描

前面声明bean的四大注解,想要生效,还需要被组件扫描的@ComponentScan扫描

@ComponentScan注解虽然没有显示配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中

Bean注入

@Autowired注解 默认是按类型进行,如果存在多个相同的bean,将会出现报错

可以通过以下几种方法解决

@Primary(直接在该类上注入就知道我们要注入的是那个类)

@Qualifier(在控制类里面@Autowired上面注入并在里面的value值指定注入的Bean名称(Bean名称一般为指定类的首字母小写))

@Resource(@Autowired不用了 直接在@Autowired的地方注入此注解格式为@Resource=(name="Bean的名称") )

@Resource和@Autowired的区别

1.@Autowired是spring框架提供的注解,而@Resource是jdk提供的注解

2.@Autowired默认按照类型注入,而@Resource默认按照名称注入

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

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

相关文章

初阶C语言(8) - 实用的调试技巧

1. 什么是bug? bug 是计算机领域专业术语,是计算机在硬件、软件、协议和系统安全策略上存在的缺陷,攻击者能够在未授权情况下访问的危害,世界最早的一批程序设计师之一,美国的葛丽丝霍波在调试设备时出现故障,拆开继电…

MySQL——变量的定义与使用

新建链接,自带world数据库,里面自带city表格。 DQL # MySQL变量的定义与使用 #1、不允许数字作为开头 #2、只能用_或$符号,不允许使用其他符号 #3、不允许使用关键字或保留字 set userName小可爱; select userName; #标识符只影响当前查询#…

python3.12.0 在Linux 制作镜像包 部署到docker 全过程

项目结构: 比如,在pycharm里需要运行 themain.py 1、上传Linux的目录结构: Dockerfile 文件需要制作: 这里是关键: #基于的基础镜像 FROM python:3.12.0 #代码添加到code文件夹 ADD ./EF_NFCS /code #设置code文…

多客陪玩系统源码APP小程序H5陪玩开发伴游源码游戏陪玩平台源码陪玩平台开发约单源码线下陪玩接单平台app小程序H5源码游戏陪玩app小程序H5开发

出售成品陪玩app小程序H5源码,免费搭建部署和售后服务,并提供源码二开、定制开发等相关服务。 一、陪玩app源码的功能介绍 1、语音聊天: 陪玩app小程序H5源码用户随时创建语音聊天室,实现多用户上麦功能,提高互动聊天体验。 2、游…

说句心里话,别轻易把RFM模型写进简历!

大家好,我是阿粥 我看过很多分析师的简历。 这么多年过去了,简历项目经历里,仍然有不少提到用SQL或者Python进行RFM建模。 项目细节描述各有千秋,但核心逻辑大体绕不开“基于Python对用户数据进行RFM建模,分成x类人群以…

Elasticsearch 索引、类型、文档、分片与副本等核心概念介绍

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Elasticsearch简介 2、分布式搜索引擎的工作原理…

深入探索数据链路层:网络通信的基石

⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在网络通信的宏伟世界中,数据链路层扮演着至关重要的角色。它位于物理层和网络层之间,不仅直接…

126.删除链表的倒数第N个节点(力扣)

题目描述 代码解决(双指针) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, Li…

深入探讨利用大型语言模型的力量的策略 (LLMs)

Note: 提示词工程是一门融合了艺术和科学的学科——它既是对技术的理解,也是对创造力和战略思维的理解。 本文为对LLMS策略分享内容学习后的整理,尝试抛开网上广泛讨论和记录的传统提示词工程技术,展示通过实验学到的新见解,以及…

片冰机工作原理

片冰机工作原理 1、制冰用的水需要加盐(行话叫做加药)至于多少量。看制冰量多少调制泵(柱塞泵)自动调整。 2、制冰机主体分两腔体外腔体内盘的一定密度的铜管。专业术语叫(蒸发腔)就是俗话讲的制冷的东西。 3、外腔体内是一个很规则的圆不锈钢腔体,中心有一三叶刮…

【LAMMPS学习】八、基础知识(6.2)LAMMPS GitHub 教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

springcloud服务间调用 feign 的使用

引入依赖包 <!-- 服务调用feign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>创建调用外部服务的接口 需要使用的地方注入 使用 启动类增…

CTF-密码学基础

概述 密码学(Cryptolopy)&#xff1a;是研究信息系统安全保密的科学 密码学研究的两个方向&#xff1a; 密码编码学(Cryptography)&#xff1a;主要研究对信息进行编码&#xff0c;实现对信息的隐蔽密码分析学(Cryptanalytics)&#xff1a;主要研究加密信息的破译或消息的伪造…

05.网络维护与管理命令

网络维护与管理命令 ifconfig 命令 功能说明 ifconfig 命令用来配置网络或显示当前网络接口状态。类似于 Windows下的ipconfig 命令&#xff0c;同时ifconfig命令必须以root用户来执行。其格式如下&#xff1a; ifconfig [选项] [interface] [inet|up|down|netmask|addr|broad…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究&#xff0c;93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…

Spark云计算平台Databricks使用,SQL

创建workspace&#xff1a;Spark云计算平台Databricks使用&#xff0c;创建workspace和Compute计算集群&#xff08;Spark集群&#xff09;-CSDN博客 1 创建schema 选择Calalog&#xff0c;点击Create schema 输入名字&#xff0c;Storage location选择workspace&#xff0c;数…

如何使用IdeaJ2023创建一个JavaWeb项目

开篇 简单整理一下创建JavaWeb项目的步骤&#xff0c;希望能对您有所帮助。 步骤图解 步骤一: 创建项目 此时得到的项目是如图所示的普通Java项目&#xff1a; 步骤二: 在项目中增加web文件夹 点击File -> Project Structure 点击Project Setting -> Modules -> …

2024北京市人工智能大模型行业应用分析报告

来源&#xff1a;北京市科学技术委员会 方向一为基于AIGC技术的智能审计合规研究&#xff0c;由北京银行提出&#xff0c;以 提高审计工作效率和准确性为核心目标&#xff0c;需要参赛企业针对检查内容&#xff0c; 利用大模型技术寻找并给出相关现象涉及的制度名称及相关原文…

2024年去除视频水印的5种方法

如果你从事电影剪辑或者视频编辑工作&#xff0c;你经常需要从优酷、抖音、TikTok下载各种视频片段……。 通常这些视频带有水印和字幕。一些免费软件如CapCut、canva、Filmora也会给你制作的视频打上水印&#xff0c;这些水印嵌入在视频内部。 2024年去除视频水印的5种方法 …

【算法】滑动窗口——水果成篮

本篇博客是我对“水果成篮”这道题由暴力解法到滑动窗口思路的具体思路&#xff0c;有需要借鉴即可。 目录 1.题目2.暴力求解3.暴力优化3.1每次right不用回退3.2有些left长度一定不如前一个&#xff0c;不用走&#xff0c;left不回退 4.滑动窗口算法5.总结 1.题目 题目链接&am…