Spring Boot框架基础

文章目录

  • 1 Spring Boot概述
  • 2 Spring Boot入门
    • 2.1 项目搭建
    • 2.2 入门程序
  • 3 数据请求与响应
    • 3.1 数据请求
    • 3.2 数据响应
  • 4 分层解耦
    • 4.1 三层架构
    • 4.2 控制反转
    • 4.3 依赖注入
  • 5 参考资料


1 Spring Boot概述

Spring是Java EE编程领域的一个轻量级开源框架,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。

Spring发展到今天已经形成一种生态圈,其中最基础、最核心的是 Spring Framework。但直接基于SpringFramework进行开发存在配置繁琐、入门难度大等问题。而Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率。

官网:https://spring.io/


2 Spring Boot入门

2.1 项目搭建

在IDEA中选择[文件]→[新建]→[项目],选择生成器中的Spring Boot,设置相关的名称、位置、语言、类型、组、工件等信息,指定所需要的依赖项,联网完成创建。

在这里插入图片描述

在这里插入图片描述

2.2 入门程序

com.example包下创建子包controller,在子包内创建和定义请求处理类HelloController

package com.example.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@RequestMapping("/hello")public String hello(){System.out.println("Hello World~");return "Hello World~";}
}

运行Spring Boot自动生成的启动类SpringbootWebQuickstartApplication,在浏览器中输入http://localhost:8080/hello运行测试。

在这里插入图片描述

@RestController注解:包括@Controller和@ResponseBody两个注解。

  1. @Controller注解:标识一个Java类为控制器,负责接收请求、处理请求,并返回响应。

  2. @ResponseBody注解:将方法返回值直接响应给浏览器,如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器。


3 数据请求与响应

3.1 数据请求

  1. 简单参数:对原始的API进行了封装,接收参数的形式更加简单。

    @RestController
    public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(String name, Integer age ){System.out.println(name+":"+age);return "OK";}
    }
    
  2. 实体参数:将请求参数封装到一个实体类对象中,保证请求参数名与实体类的属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。

    @RestController
    public class RequestController {@RequestMapping("/pojoParam")public String simplePojo(User user){System.out.println(user);return "OK";}
    }
    
  3. 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。

    @RestController
    public class RequestController {@RequestMapping("/arrayParam")public String arrayParam(String[] hobby){System.out.println(Arrays.toString(hobby));return "OK";}
    }
    
  4. 集合参数:请求参数名与形参集合对象名相同且请求参数为多个,使用@RequestParam绑定参数关系。

    @RestController
    public class RequestController {@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby){System.out.println(hobby);return "OK";}
    }
    
  5. 日期参数:通过@DateTimeFormat注解,以及其pattern属性来设置日期的格式。

    @RestController
    public class RequestController {@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}
    }
    
  6. JSON参数:JSON是开发中最常用的前后端数据交互方式,JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody注解将JSON数据映射到形参的实体类对象中。

    @RestController
    public class RequestController {@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user){System.out.println(user);return "OK";}
    }
    
  7. 路径参数:直接在请求的URL中传递参数。

    @RestController
    public class RequestController {@RequestMapping("/path/{id}")public String pathParam(@PathVariable Integer id){System.out.println(id);return "OK";}
    }
    

3.2 数据响应

统一响应结果使用类来描述,在这个结果中包含响应状态码(当前请求是成功或失败)、状态码信息(给页面的提示信息)、返回的数据(给前端响应的数据)。

public class Result {private Integer code;//响应码private String msg;  //响应码private Object data; //响应数据public Result() { }public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}...//查询 成功响应示例public static Result success(Object data){return new Result(1,"success",data);}
}

4 分层解耦

4.1 三层架构

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

在这里插入图片描述

  1. 前端发起的请求,由Controller层接收(Controller响应数据给前端)

  2. Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)

  3. Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)

  4. Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)

在软件设计中,我们要做到“高内聚、低耦合”,不直接new一个不同层的新对象,而是提供一个容器,容器中存储一些对象,controller程序从容器中获取Service层需要调用的类型的对象。

4.2 控制反转

控制反转(Inversion Of Control,简称IOC):对象的创建控制权由程序自身转移到外部容器,对象的创建权由程序员主动创建转移到由容器创建、管理对象(bean对象),这个容器称为IOC容器或Spring容器。

Spring框架为了更好的标识开发中bean对象的归属,又提供了@Component的衍生注解。

  1. @Controller :标注在控制层类上

  2. @Service:标注在业务层类上

  3. @Repository:标注在数据访问层类上。

在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字。如果没有指定,默认为类名首字母小写。

在开发过程中,推荐将controller,service,dao等都放在引导类所在包的子包下,确保定义的bean会被自动的扫描到。

4.3 依赖注入

依赖注入(Dependency Injection,简称DI):容器为应用程序提供运行时所依赖的资源,程序运行时需要某个资源,此时容器就为其提供这个资源。

@Autowired注解:按照类型进行自动装配,去IOC容器中找某个类型的对象,然后完成注入操作。

为了解决IOC容器中存在多个相同类型的bean对象而报错的问题,可以选择使用@Primary注解(在类前添加确定默认的实现)、@Qualifier(配合@Autowired指定当前要注入的bean对象)、@Resource(通过name属性指定要注入的bean的名称)。

@Autowird 与 @Resource的区别

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

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


5 参考资料

黑马程序员JavaWeb开发教程-bilibili

Springboot入门到精通(超详细文档)_springboot文档-CSDN博客

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

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

相关文章

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明

Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 目录 Python 机器学习 基础 之 处理文本数据 【处理文本数据/用字符串表示数据类型/将文本数据表示为词袋】的简单说明 一、简单介绍 二、处理文本数据 三、用…

IDEA2023.1.4配置springboot项目

新建“Spring Initializr”项目 勾选以下三个依赖项即可。 springboot分为代码层、资源层和测试层。 代码层 根目录&#xff1a;src/main/java 入口启动类及程序的开发目录。在这个目录下进行业务开发、创建实体层、控制器层、数据连接层等。 资源层 根目录&#xff1a;src…

喜讯!云起无垠入选《LLM驱动数字安全2024—AI安全系列报告》

近日&#xff0c;国内领先的数字化领域第三方服务机构数世咨询&#xff0c;发布了《LLM驱动数字安全2024—AI安全系列报告》。该报告深入统计分析了国内在LLM研发或应用方面具有实力的数字安全供应商&#xff0c;并通过报告和雷达图的形式&#xff0c;直观展示了这些供应商在数…

vue2的form利用插槽修改错误提示UI

1. 需求 很多时候我们使用el-form想修改下错误提示的UI&#xff0c;比如table中使用form校验这类场景下错误提示的UI调整就非常重要。 2. 了解文档 Form-Item Scoped Slot name说明error自定义表单校验信息的显示方式&#xff0c;参数为 { error } 3.实际使用 html里使用…

抽象,自定义函数,递归

6.1懒惰是一种美德 如果你 在一个地方编写了一些代码&#xff0c;但需要在另一个地方再次使用&#xff0c;该如何办呢&#xff1f; 假设你编写了一段代码&#xff0c;它计算一些斐波那契数&#xff08;一种数列&#xff0c;其中每个数都是前两个数的和&#xff09;。 现在的…

笔记96:前馈控制 + 航向误差

1. 回顾 对于一个 系统而言&#xff0c;结构可以画作&#xff1a; 如果采用 这样的控制策略&#xff0c;结构可以画作&#xff1a;&#xff08;这就是LQR控制&#xff09; 使用LQR控制器&#xff0c;可以通过公式 和 构建一个完美的负反馈系统&#xff1b; a a 但是有上…

解密智慧校园解决方案:赋能数字化教育的未来

在当今数字化时代&#xff0c;智慧校园解决方案正以惊人的速度改变着教育界的面貌。随着科技的快速发展&#xff0c;数字化教育已经逐渐成为现代教育的核心。智慧校园解决方案作为一个集技术、教育和创新于一体的综合性项目&#xff0c;为学校提供了许多机遇和挑战。本文将揭示…

遇见桂林山水画廊,深层互联自动讲解耳机走进漓江

遇见山水&#xff0c;听懂山水。由深层互联独家打造&#xff0c;桂林漓江山水画廊导览工程&#xff0c;于不久前正式启动&#xff0c;声情并茂的真人语音引导着游客&#xff0c;走进有声有色的山水画卷中。 桂林山水甲天下&#xff0c;得天独厚的自然景观&#xff0c;奇幻瑰丽…

掌握4种常见电脑视频压缩方法,轻松解决空间危机

在现今数字化的时代&#xff0c;视频成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着高清、超高清视频的普及&#xff0c;视频文件的大小也随之增大&#xff0c;给存储、传输和分享带来了一定的挑战。为了克服这一问题&#xff0c;电脑视频压缩成为一项关键的技术…

SwiftUI获取用户的位置信息(CLLocationManager,CLLocationManagerDelegate)

本篇文章将会介绍一下在SwiftUI中如何通过CorLocation框架获取用户的位置信息&#xff0c;因为获取位置信息属于用户的隐私信息&#xff0c;所以需要在Info.plist文件里面加上访问位置权限的说明。 关于位置信息&#xff0c;可以请求两种级别的许可&#xff1a;always和when i…

视频剪辑去水印软件推荐 视频剪辑去水印方法

不会去水印&#xff0c;很难做好视频剪辑。选对软件、掌握去水印的方法&#xff0c;是每个剪辑师必须经历的过程。真正擅长视频剪辑去水印的软件&#xff0c;一定具备多种去水印功能。剪辑师可以根据素材的具体情况&#xff0c;选择最恰当的去水印方法。有关视频剪辑去水印软件…

JimuReport 积木报表 v1.7.5 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

【日记】遇到了一个很奇怪的大爷(845 字)

正文 花了昨天和今天两天时间&#xff0c;把数据转移完了。这块 2T 的硬盘可以光荣退休了。目前是没什么存储焦虑了。 农发行净开发一些垃圾系统。今天没什么业务&#xff0c;但跟 ActiveX 斗智斗勇了一整天&#xff0c;最后实在搞不过 IE 浏览器。我也懒得管了&#xff0c;又不…

禁用layui树形表格的多选框checkbox

1. 背景 在使用树形表格渲染数据时&#xff0c;需要对数据进行批量操作。相对于选中数据后&#xff0c;再做错误提示。直接把数据的多选框禁用掉更加直观。 2. 实现 DisabledTableCheckBox: () > {// 获取所有行 var tableElem $(".layui-table-fixed-l");var …

一脉阳光上市圆梦:销售成本高昂,两大创始人的行贿往事与屡屡被罚

《港湾商业观察》施子夫 2024年6月7日&#xff0c;江西一脉阳光集团股份有限公司&#xff08;以下简称&#xff0c;一脉阳光&#xff09;将正式在港交所主板挂牌上市&#xff08;以下简称&#xff0c;一脉阳光&#xff1b;股票代码02522.HK&#xff09;&#xff0c;公司预计发…

Vue3【七】setup的语法糖setup简写方法

Vue3【七】setup的语法糖setup简写方法 Vue3【七】setup的语法糖setup简写方法 使用script标签式写法称为setup语法糖 组件名称默认位文件名 export 的内容可以省略 案例截图 案例目录 案例代码 Person.vue <template><div class"person"><h1>我…

这才是计科之 Onix XV6 源码分析(1、XV6-x86的启动)

这才是计科之 Onix & XV6 源码分析&#xff08;1、XV6-x86的启动&#xff09; 前言 Onix是一款相对于XV6来说功能更为健全的单核OS&#xff0c;由于功能更加完善&#xff0c;Onix也更加复杂。代码阅读起来会比较绕。 XV6是一款简单易读的多核操作系统&#xff0c;但其功…

【JMeter接口测试工具】第一节.JMeter简介和安装【入门篇】

文章目录 前言一、JMeter简介 1.1 JMeter基本介绍 1.2 JMeter优缺点二、JMeter安装 2.1 JMeter安装步骤 2.2 JMeter环境配置三、项目介绍 3.1 项目简介 3.2 API接口清单总结 前言 一、JMeter简介 1.1 JMeter基本介绍 JMeter 是 Apache 组织使用…

java---程序逻辑控制(详解)

目录 一、概述二、顺序结构三、分支结构3.1 if语句3.1.1 语法格式13.1.2 语法格式23.1.3 语法格式3 3.2 练习3.2.1 判断一个数字是奇数还是偶数3.2.2 判断一个数字是正数&#xff0c;负数&#xff0c;还是零3.2.3 判断一个年份是否为闰年 3.3.switch语句 四、循环结构4.1 while…

Flutter vscode环境如何进行真机测试

目录 1. 准备工作 1.1 安装Flutter和VS Code 1.2 安装必要的VS Code扩展 1.3 手机设置 2. 配置VS Code调试环境 3. 手机如何退出开发者模式 1. 准备工作 1.1 安装Flutter和VS Code 确保你已经在电脑上安装了Flutter SDK和VS Code。如果还没有&#xff0c;可以参考以下指…