当前位置: 首页 > news >正文

SpringBoot Notes

文章目录

  • 1 SpringBootWeb快速入门
    • 1.1Spring官网
    • 1.2 Web分析
  • 2. HTTP协议
    • 2.1 HTTP介绍
  • 3
  • 4 SpringBootWeb请求响应
  • 5 响应
  • 6 分层解耦
    • 6.1 三层架构
      • 6.1.1 三层架构介绍
      • 6.1.2 基于三层架构的程序执行流程:
      • 6.1.3 代码拆分
    • 6.2 分层解耦
      • 6.2.1 内聚、耦合
      • 6.2.2 解耦思路
    • 6.3 IOC&DI
      • 6.3.1 IOC详解
        • 6.3.1.1 bean的声明
        • 6.3.1.2 组件扫描
      • 6.1.2 DI详解

1 SpringBootWeb快速入门

1.1Spring官网

https://spring.io

spring家族的技术,都是基于SpringFramework的,SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等。

1.2 Web分析

在这里插入图片描述

浏览器服务器两端进行数据交互,使用http协议

2. HTTP协议

2.1 HTTP介绍

HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。

3

4 SpringBootWeb请求响应

5 响应

6 分层解耦

6.1 三层架构

6.1.1 三层架构介绍

在我们进行程序设计及程序开发时,尽可能让每一个接口、类、方法的职责更单一些(单一职责原则)。

单一职责原则:一个类或一个方法,就只做一件事情,只管一块功能。
在这里插入图片描述
根据上述案例的处理逻辑呢,从组成上分为三部分:

  • 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。
  • 逻辑处理:负责业务逻辑处理的代码。
  • 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。

按照上述三个组成部分,在我们项目开发中呢,可以将代码分为三层:
在这里插入图片描述

  • Controller控制层。接收前端发送的请求,对请求进行处理,并响应数据
  • Service业务逻辑层。处理具体的业务逻辑
  • Dao数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。

6.1.2 基于三层架构的程序执行流程:

在这里插入图片描述

  • 前端发起请求,由Controller层接收(Controller响应数据给前端)
  • Controller层调用Service层进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)
  • Serivce层调用Dao层(逻辑处理过程中需要用到的数据Dao层获取
  • Dao层操作文件中数据(Dao拿到的数据会返回给Service层)

6.1.3 代码拆分

包名备注作用
控制层包名xxxx.controller接收前端发送请求,对请求进行处理,并响应数据
业务逻辑层包名xxxx.service处理业务逻辑
数据访问层包名xxxx.dao数据访问操作,包含数据的增、删、改、查

三层架构的好处

  1. 复用性强
  2. 便于维护
  3. 利用扩展

6.2 分层解耦

6.2.1 内聚、耦合

内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块间的依赖、关联的程度。
软件设计原则:高内聚低耦合。

6.2.2 解耦思路

解决思路是:

  • 提供一个容器,容器中存储一些对象(例:EmpService对象)
  • controller程序从容器中获取EmpService类型的对象

实现上述解耦操作,涉及到Spring中的两个核心概念:

控制反转:( Inversion Of Control,简称IOC)。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。
依赖注入:(Dependency Injection,简称DI)。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

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

6.3 IOC&DI

6.3.1 IOC详解

6.3.1.1 bean的声明

IOC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。IOC容器创建的对象称为bean对象。

要把某个对象交给IOC容器管理,需要在类上添加注解:@Component
为了更好标识web应用程序中bean对象到归属于哪层,又提供了@Component的衍生注解

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

6.3.1.2 组件扫描

bean想要生效,需要被组件扫描
在这里插入图片描述
运行程序后,报错:
在这里插入图片描述
为什么没有找到bean对象呢?

  • 使用四大注解声明的bean,要想生效,需要被组件扫描注解@ComponentScan扫描
    @ComponentScan注解没有显式配置,但实际上已经包含在引导类声明注解 @SpringBootApplication 中,默认扫描的范围是SpringBoot启动类所在包及其子包

如下结构扫描全部:
在这里插入图片描述

6.1.2 DI详解

依赖注入,指IOC容器要为应用程序提供运行时所依赖的资源,而资源指的就是对象

@Autowired注解,默认是按照类型进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)
入门程序举例:在EmpController运行时,要到IOC容器中找EmpService类型的对象,而IOC容器中刚好有EmpService类型的对象,所以就找到了这个类型的对象完成注入操作。

那如果在IOC容器中,存在多个相同类型的bean对象,会出现什么情况呢?
在这里插入图片描述
程序运行会报错
在这里插入图片描述

如何解决上述问题呢?Spring提供了以下几种解决方案:

  • @Primary
    使用@Primary注解:当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。
    在这里插入图片描述
  • @Qualifier
    使用@Qualifier注解:指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。
  • @Qualifier注解不能单独使用,必须配合@Autowired使用
    在这里插入图片描述
  • @Resource
    使用@Resource注解:是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。
    在这里插入图片描述

面试题 : @Autowird 与 @Resource的区别

  • @Autowiredspring框架提供的注解,而**@ResourceJDK提供**的注解
  • @Autowired 默认是按照类型注入,而**@Resource按照名称注入**

相关文章:

SpringBoot Notes

文章目录1 SpringBootWeb快速入门1.1Spring官网1.2 Web分析2. HTTP协议2.1 HTTP介绍34 SpringBootWeb请求响应5 响应6 分层解耦6.1 三层架构6.1.1 三层架构介绍6.1.2 基于三层架构的程序执行流程:6.1.3 代码拆分6.2 分层解耦6.2.1 内聚、耦合6.2.2 解耦思路6.3 IOC&…...

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置(1)开开启日志服务(2)特定域名使用自定义 DNS 服务器(3&…...

码农饭碗不保——ChatGPT正在取代Coder

码农饭碗不保——ChatGPT正在取代Coder 最近被OpenAI的ChatGPT刷屏了。我猜你已经读了很多关于ChatGPT的文章,不需要再介绍了。假如碰巧您还不太了解ChatGPT是什么,可以先看一下这篇文章,然后再回来继续。 与ChatGPT对话很有趣,…...

PAT (Advanced Level) Practice 1004 Counting Leaves

1004 Counting Leaves题目翻译代码分数 30 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one test case. Eac…...

基于Redis实现的分布式锁

基于Redis实现的分布式锁什么是分布式锁分布式锁主流的实现方案Redis分布式锁Redis分布式锁的Java代码体现优化一:使用UUID防止误删除优化二:LUA保证删除原子性什么是分布式锁 单体单机部署中可以为一个操作加上锁,这样其他操作就会等待锁释…...

2023年,还找算法岗工作吗?

点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达2023年春招(补招)已经大规模启动了!距离2023年暑期实习不到2个月!距离2024届校招提前批不到4个月!距离2024届秋招正式批不到6个月&a…...

正点原子ARM裸机开发篇

裸机就是手动的操作硬件来实现驱动设备,后面会有驱动框架不需要这么麻烦 第八章 汇编 LED 灯实验 核心过程 通过汇编语言来控制硬件(驱动程序) 代码流程 1、使能 GPIO1 时钟 GPIO1 的时钟由 CCM_CCGR1 的 bit27 和 bit26 这两个位控制&…...

20222023华为OD机试 - 压缩报文还原(JS)

压缩报文还原 题目 为了提升数据传输的效率,会对传输的报文进行压缩处理。 输入一个压缩后的报文,请返回它解压后的原始报文。 压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。 注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。 …...

SheetJS的部分操作

成文时间&#xff1a;2023年2月18日 使用版本&#xff1a;"xlsx": "^0.18.5" 碎碎念&#xff1a; 有错请指正。 这个库自说自话升级到0.19。旧版的文档我记得当时是直接写在github的README上。 我不太会使用github&#xff0c;现在我不知道去哪里可以找到…...

pytest总结

这里写目录标题一、pytest的命名规则二、界面化配置符合命名规则的方法前面会有运行标记三、pytest的用例结构三部分组成四、pytest的用例断言断言写法&#xff1a;五、pytest测试框架结构六、pytest参数化用例1、pytest参数化实现方式2、单参数&#xff1a;每一条测试数据都会…...

CNI 网络分析(九)Calico IPIP

文章目录环境流量分析Pod 间Node 到 PodPod 到 serviceNode 到 serviceNetworkPolicy理清和观测网络流量环境 可以看到&#xff0c;在宿主机上有到每个 pod IP 的路由指向 veth 设备 到对端节点网段的路由 指向 tunl0 下一跳 ens10 的 ip 有到本节点网段 第一个 ip 即 tunl0 的…...

分布式任务调度(XXL-JOB)

什么是分布式任务调度&#xff1f; 任务调度顾名思义&#xff0c;就是对任务的调度&#xff0c;它是指系统为了完成特定业务&#xff0c;基于给定时间点&#xff0c;给定时间间隔或者给定执行次数自动执行任务。通常任务调度的程序是集成在应用中的&#xff0c;比如&#xff1a…...

Django框架之模型视图--Session

Session 1 启用Session Django项目默认启用Session。 可以在settings.py文件中查看&#xff0c;如图所示 如需禁用session&#xff0c;将上图中的session中间件注释掉即可。 2 存储方式 在settings.py文件中&#xff0c;可以设置session数据的存储方式&#xff0c;可以保存…...

二极管的“几种”应用

不知大家平时有没有留意&#xff0c;二极管的应用范围是非常广的&#xff0c;下面我们来看看我想到几种应用&#xff0c;也可以加深对电路设计的认识&#xff1a; A&#xff0c;特性应用&#xff1a; 由于二极管的种类非常之多&#xff0c;这里这个大类简单罗列下&#xff1a…...

github上传本地文件详细过程

repository 也就是俗称的仓库 声明&#xff1a;后续操作基于win10系统 前提&#xff1a;有一个github账号、电脑安装了git(官方安装地址) 目的&#xff1a; 把图中pdf文件上传到github上的个人仓库中 效果&#xff1a; 温馨提示&#xff1a; git中复制: ctrl insert&#xf…...

常用聚类算法分析

1. 什么是聚类 1.1. 聚类的定义 聚类(Clustering)是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇&#xff0c;使得同一个簇内的数据对象的相似性尽可能大&#xff0c;同时不在同一个簇中的数据对象的差异性也尽可能地大。也即聚类后同一类的数据尽可能聚集到一起…...

OSG三维渲染引擎编程学习之五十八:“第五章:OSG场景渲染” 之 “5.16 简单光源”

目录 第五章 OSG场景渲染 5.16 简单光源 5.16.1 场景中使用光源 5.16.2 简单光源示例 第五章 OSG场景渲染 OSG存在场景树和渲染树,“场景数”的构建在第三章“OSG场景组...

80211无线网络架构

无线网络架构物理组件BSS&#xff08;Basic Service Set&#xff09;基本服务集BSSID&#xff08;BSS Identification&#xff09;ssid&#xff08;Service Set Identification&#xff09;ESS&#xff08;Extended Service Set&#xff09;扩展服务集物理组件 无线网络包含四…...

基于springboot+vue的便利店库存管理系统

基于springbootvue的便利店库存管理系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景…...

3|物联网控制|计算机控制-刘川来胡乃平版|第1章:绪论|青岛科技大学课堂笔记|U1 ppt

目录绪论&#xff08;2学时&#xff09;常用仪表设备&#xff08;3学时&#xff09;计算机总线技术&#xff08;4学时&#xff09;过程通道与人机接口&#xff08;6学时&#xff09;数据处理与控制策略&#xff08;6学时&#xff09;网络与通讯技术&#xff08;3学时&#xff0…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...