SpringBoot+SpringMVC常用注解

文章目录

    • 发展历程
    • 项目创建
    • 项目结构
    • 入门案例
    • 配置文件的两种方式:只能使用一种
    • 创建项目二
    • 入门案例
    • 常用知识及注解
      • @Controller:类上面加,SpringMVC的注解
      • @GetMapping:方法上面加
      • Spring框架的两项核心功能
        • @Component:组件。控制反转,加在业务类上面:比如SudentServiceImpl
        • @Autowired:依赖注入:spring框架自动将容器中的实例,自动赋值给需要的类。是Spring的注解
      • @Resource注解:依赖注入,不是Spring的注解
      • @Component 和@Service,@Repository (仓储),@Controller ,@RestController一样,自动创建唯一实例
      • @XXXMapping:用在方法上面

发展历程

SpringBoot环节:主力,要掌握,熟练使用

发展历程:

之后同一期出现的三种:

SSH1:
servlet+jsp,这是初级阶段。mvc三层架构。m:model,v:view,c:controller
struct 1.0 起初解决mvc 扩展名为.do的网站
spring 1.0:专注于帮程序员创建对象(程序员new对象容易失控)。单例对象(只创建一次对象就行了,属性类没有必要重复使用)
hibernate 1.0 :orm关系映射。将数据库中的结果集转换为Java对象,无需自己写sql。

之后发展:
SSH2:
struct 2.0 .action扩展名
spring 2.0 加入aop功能,面向切面功能
mybaits:orm 轻量级,需要程序员自己写sql
hibernate 2.0+

SSM:需要使用xml配置
springMVC:解决MVC,替代struct2.0。容易
Spring 3.0+ 增加更多功能,模块化
mybaits 3.0+ 替代hibernate

微服务:把一个大项目拆分成小的项目,然后根据需要进行整合。(例如:微信上面的小程序)规模小。
SprigBoot:不是一个框架。是一个快速开发脚手架。快速开发,在一定程度上限制了自由性。有固定的目录结构,有约定俗成的配置。约定大于配置(配置越少越好,快速开发)。SpringBoot用于整合SSM。

项目创建

请添加图片描述
请添加图片描述

请添加图片描述
项目创建完成后首先检查编码,配置maven
请添加图片描述
请添加图片描述

项目结构

请添加图片描述
xml配置文件说明:

以spring-boot-starter开头的包,叫启动器。对项目进行自动化配置。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.situ</groupId><artifactId>demo01</artifactId><version>0.0.1-SNAPSHOT</version><name>demo01</name><description>demo01</description><properties><java.version>21</java.version></properties><dependencies><!--        thymeleaf启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
<!--        SpingMVC启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--        单元测试启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

入门案例

根包。所有的自己写的java部分写在根包下:约定大于配置
主启动类。
在类上面加上Controller表示这个类是一个控制器类。
在方法上加上GetMapping注解表示这个方法可以接收请求,指定请求的路径。
如果方法上面不加GetMapping注解表示这个方法就是普通方法。

请添加图片描述

package com.situ.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;@Controller//表明这是一个控制器类
public class HelloWorldController {@GetMapping("/hello")//方法的路径public String hello(){System.out.println("hello");return "hello";}
}
<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body>
<p>你好</p></body>
</html>

启动:
在这里插入图片描述

配置文件的两种方式:只能使用一种

请添加图片描述

请添加图片描述

创建项目二

创建的时候加入:
请添加图片描述

以spring-boot-starter开头的包,叫启动器。对项目进行自动化配置。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>

入门案例

根包。所有的自己写的java部分写在根包下:约定大于配置
主启动类。
在类上面加上Controller表示这个类是一个控制器类。
在方法上加上GetMapping注解表示这个方法可以接收请求,指定请求的路径。
如果方法上面不加GetMapping注解表示这个方法就是普通方法。
在这里插入图片描述
list.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>学生信息列表页面</title>
</head>
<body><h1>学生信息列表页面</h1><table><thead><tr><th>姓名</th><th>性别</th><th>出生日期</th></tr></thead></table></body>
</html>

结果展示:

在这里插入图片描述

常用知识及注解

@Controller:类上面加,SpringMVC的注解

类上面加上Controller表示这个类是一个控制器类。

@GetMapping:方法上面加

方法上加上GetMapping注解表示这个方法可以接收请求,指定请求的路径。
如果方法上面不加GetMapping注解表示这个方法就是普通方法。
请添加图片描述

Spring框架的两项核心功能

控制反转: Spring:将创建对象的权限交给spring框架,称之为控制反转 Inverse Of Control 简称ioc

依赖注入:Spring框架自动将容器中的实例,自动赋值给需要的类,DI

@Component:组件。控制反转,加在业务类上面:比如SudentServiceImpl

Spring:将创建对象的权限交给spring框架,称之为控制反转。Inverse Of Control,简称Ioc

加上这个注解,spring在启动的时候会自动扫描根包下面的所有带这个注解的类,如果发现就会创建唯一实例(控制反转),是单例的

在这里插入图片描述

创建出来的唯一实例放在了哪里?创建出来了如何获取?

手动获取:
创建出来的唯一实例放在了容器对象里面, 然后将容器对象放在全局域中:

package com.situ.controller;
import com.situ.model.Student;
import com.situ.service.StudentService;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import java.util.List;
import java.util.Map;@Controller//控制器类
public class StudentController {private StudentService studentService;@GetMapping("/student/list")//访问路径,能够接收请求。public String list(Map<String, Object> map, HttpServletRequest request){//这个方法只能使用反射的方式调用:因为参数可以加,不确定多少个//手动获取实例:ServletContext ctx = request.getServletContext();//全局域//spring的应用上下文对象。容器 。创建的唯一实例会放在容器里面,然后放在全局域中:ApplicationContext ac = WebApplicationContextUtils.findWebApplicationContext(ctx);studentService = ac.getBean(StudentService.class);//取出指定类型的唯一实例List<Student> students = studentService.findAll();//调用方法:map.put("students", students);//放到请求域中:底层自动进行参数校验return "student/list";//return就是请求转发,请求转发到templates下面的student/list文件}
}

在这里插入图片描述

但是手动获取比较麻烦,所以出现了依赖注入:

@Autowired:依赖注入:spring框架自动将容器中的实例,自动赋值给需要的类。是Spring的注解

依赖关系:实现类实现接口,实现类就依赖于这个接口。让Spring去解决依赖关系。
依赖注入的三种方式:

1.字段注入:加在字段上面,不推荐使用,不方便测试

 @Autowiredprivate StudentService studentService ;

在这里插入图片描述

2.setter注入

  @Autowiredpublic void setStudentService(StudentService studentService) {this.studentService = studentService;}

在这里插入图片描述

3.构造器注入
构造器注入可以省略Autowired注解

   @Autowired   //构造器注入可以省略此行注解public StudentController(StudentService studentService){this.studentService= studentService;}

在这里插入图片描述

@Autowired
1.默认按类型匹配 使用频率比较高
当有多个实现类匹配时,可以使用@Primary注解表示优先
2.按名称匹配:需要搭配 @Qualifier()注解,同时指定Bean的名称,bean名称可以在@Component(“i2”)中指定,要是括号中不指定,则默认以类名(首字母小写)为bean名称

@Resource注解:依赖注入,不是Spring的注解

也是依赖注入
1.默认按名称注入 按name值

 @Resource(name = "i1")

2.按类型注入:通过type属性

在这里插入图片描述

@Component 和@Service,@Repository (仓储),@Controller ,@RestController一样,自动创建唯一实例

其中,@RestController 是Controller的别名,
@Controller 和@RestController还会被识别出控制器,是不同于上面的额外作用。@Controller 和@RestController一般不用于创建唯一实例。
他们都是自动创建唯一实例的,但是 @Component 比较中性,不能见名知意。所有我们在Servcie层一般使用@Service,在Dao层数据处理层一般使用@Repository创建唯一实例

创建唯一实例:

在这里插入图片描述
注入依赖:

在这里插入图片描述

@XXXMapping:用在方法上面

在Controller中,一个方法只有指定@XXXMapping,才能接收请求。如果一个方法上面不加注解,那么他就是一个普通方法。
常见方式:
@GetMapping 接收get类型的请求
@PostMapping 接收post类型的请求
@PutMapping 接收put类型的请求
@PatchMapping 接收patch类型的请求
@DeleteMapping 接收delete类型的请求

@RequestMapping:接收任意类型的请求,但可以手动指定请求类型。
produces属性指定响应内容的类型。

@RequestMapping(value = "/student/list",method = RequestMethod.GET)

在这里插入图片描述

@XXXMapping也可以添加到类上面:添加到类上,表示所有方法以类上定义的方法作为公共前缀。表示全局统一定义。@GetMapping("/student/list")

在这里插入图片描述

参数:是通过反射调用的,数量,顺序可以任意。
1.可以HttpServletRequest,HttpSerlvetResponse,HttpSession
2.基本数据类型,以及包装类,BigDecimal,BigInteger,String。用于接收请求中的参数。
搭配 @RequstParam注解搭配@PathVariable注解(路径变量)。通过这个注解可以指定获取参数和传输参数名字不一样的情况。这两个都是定义在参数位置上的。
3.javabean,普通类。将请求参数通过反射,设置到javabean实例中。即Spring会自动映射,获取参数,转类型、赋值一系列全部搞定。
4.Map,Model,ModelMap:充当请求域。map最常用。
5.加@RequestParam注解的map,此map不再作为请求域,而是用于存储请求参数。
6.以上类型的任意组合。
在这里插入图片描述
在这里插入图片描述

map:
在这里插入图片描述

在这里插入图片描述

返回值:
1.当返回的是字符串且响应内容类型为text/html,返回值即模板文件名。在满足1的基础上,返回"forword:/xxx",表示请求转发。在满足1的基础上,返回"redirect:/xxx",表示重定向。
在这里插入图片描述

2.ModelAndView:即可以指定视图名称,同时可以当请求域使用。前三种本质上也会被包装成ModelAndView
在这里插入图片描述

3.如果指定响应内容类型为josn,并且添加了@ResponseBody注解,无论返回值是什么类型,都会序列化成json字符串。
在这里插入图片描述

4.返回ResponseEntity类型,仅限于响应json格式。同时封装了业务数据,以及响应的状态码。
在这里插入图片描述

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

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

相关文章

标准GS相位恢复算法

标准GS相位恢复算法详解与MATLAB实现 Gerchberg-Saxton (GS) 算法是一种经典的相位恢复方法&#xff0c;广泛应用于光学成像、衍射成像和全息技术等领域。该算法通过迭代过程从未知相位的强度测量中恢复相位信息。 算法原理 GS算法的核心思想是利用傅里叶变换关系在空间域和频率…

【Linux网络编程基础--socket地址API】

一、主机字节序和网络字节序主机字节序&#xff08;Host Byte Order&#xff09;&#xff1a;你当前电脑的内存字节顺序&#xff08;比如 x86 是小端&#xff09;网络字节序&#xff08;Network Byte Order&#xff09;&#xff1a;统一规定为大端序&#xff08;高位字节在高位…

Linux路径MTU发现(Path MTU Discovery, PMTU)

Linux路径MTU发现&#xff08;Path MTU Discovery, PMTU&#xff09;机制是TCP/IP协议栈中确保数据包高效传输的核心技术。其核心目标是动态探测源主机到目的主机路径上的最小MTU&#xff08;Maximum Transmission Unit&#xff09;&#xff0c;从而避免IP分片&#xff0c;提升…

【MySQL进阶】------MySQL程序

MySQL程序简介 MySQL安装完成通常会包含如下程序&#xff1a; Linux系统程序⼀般在 /usr/bin⽬录下&#xff0c;可以通过命令查看&#xff1a; windows系统⽬录&#xff1a;你的安装路径\MySQL Server 8.0\bin&#xff0c;可以通过命令查看&#xff1a; 每个 MySQL 程序都有许…

Linux大页内存导致服务内存不足

Linux大页内存导致服务内存不足的解决方法 大页内存&#xff08;Huge Pages&#xff09;是Linux内核提供的一种机制&#xff0c;用于减少TLB&#xff08;转换后备缓冲区&#xff09;的压力&#xff0c;提高内存访问性能。然而&#xff0c;如果配置不当&#xff0c;大页内存可能…

超宽带测距+测角+无线通信一体化模组:智能门锁、智能遥控器、AR头戴、智能穿戴

超宽带测距测角无线通信一体化模组&#xff1a;智能门锁、智能遥控器、AR头戴、智能穿戴UWB测距测角技术&#xff0c;因其高精度、低延迟、抗干扰能力&#xff0c;正广泛应用于“人-物-设备”的空间感知场景&#xff0c;成为构建智能空间和精准互动的重要底层技术。代表厂商与产…

基于单片机空气质量检测/气体检测系统

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 随着环境污染问题日益严重&#xff0c;空气质量监测成为社会关注的焦点。基于单片机的空气质量检…

网络安全 | 从 0 到 1 了解 WAF:Web 应用防火墙到底是什么?

&#x1f914; 写在前面 2020年 我参加公司的安全技能大赛&#xff0c;队友在实操环节启用了 WAF 防火墙&#xff0c;这是我第一次接触到 Web 应用防火墙。作为一个 Web 开发老鸟&#xff0c;真是羞愧呀&#x1f602;。 &#x1f510; Web应用防火墙 WAF 全称是 Web Applica…

服务器突然之间特别卡,什么原因?

原因总结&#xff1a;1.一般是本地网速的问题&#xff0c;服务器网速的问题&#xff0c;服务器CPU被占满的问题今天发现另一个会导致特别卡的问题&#xff0c;是主存占满也会导致卡顿。解释如下&#xff1a;当服务器的主存&#xff08;物理内存&#xff09;被完全占满时&#x…

AI应用标准详解:A2A MCP AG-UI

"OpenAI接入MCP&#xff0c;Google推出A2A&#xff0c;微软与OpenAI紧密绑定"标志着云计算竞争焦点已从"算力"和"模型参数"转向‌Agent标准协议控制权‌。在AI快速演进的今天&#xff0c;我们不再仅关注单个AI的智能水平&#xff0c;而是探索多个…

Web安全学习步骤

以下是Web安全专项学习步骤&#xff0c;聚焦实战能力培养&#xff0c;分为4个阶段资源清单**&#xff0c;适合从入门到进阶。重点培养漏洞挖掘能力与防御方案设计双重视角&#xff1a;---阶段1&#xff1a;Web技术筑基&#xff08;1-2个月&#xff09; | 领域 | 关键…

Android工程命令行打包并自动生成签名Apk

1.进入工程目录查看所有gradle任务 2.打包debug与release 打包前先生成jks签名文件test.jks 在工程的build.gradle中添加签名配置 signingConfigs {release {storeFile file("/home/dev/test.jks")storePassword "111111"keyAlias "key0"keyPas…

分布式微服务--Nacos作为配置中心(一)

1.Nacos配置远程配置中心注意总结&#xff1a;本地配置文件必须使用 bootstrap.yml 或 bootstrap.properties远程配置的加载优先于 application.yml&#xff0c;因此必须写在 bootstrap 配置文件中。本地配置文件中 file-extension 的取值仅支持两种&#xff1a;properties 或 …

Linux安装MySQL及链接第三方工具详细教程,带图带错误分析

本教程所有代码均为root用户权限下操作&#xff0c;如果不是root用户&#xff0c;在代码前加上&#xff08;sudo &#xff09;即可 一、安装MySQL服务 准备工作&#xff1a; 有时&#xff0c;系统无法解析 部分域名&#xff0c;导致无法获取镜像列表&#xff0c;从而无法安装…

WPS2024 软件下载及安装教程!

软件介绍 WPS Office是一套办公软件套装&#xff0c;包含WPS文字、WPS表格、WPS演示三大功能模块&#xff0c;可以满足常用文字处理、表格编辑和演示制作等多种办公需求&#xff0c;以其强大的功能和用户友好的界面赢得了众多用户的青睐。 软件&#xff1a;‌‌‌‌‌‌WPS Of…

ESD监控系统确保工厂生产设备的静电安全

随着电子工业的飞速发展&#xff0c;电子产品的精密程度不断提高&#xff0c;对生产环境的要求也日益严格。在许多电子制造工厂中&#xff0c;安装和维护有效的静电防护措施已成为保障生产安全和产品品质的关键。ESD监控系统作为静电管理的核心工具&#xff0c;为确保工厂设备和…

基于react的YAPI实战指南

基于react的YAPI 示例新增项目扩展遇到的问题&#xff0c;更改页面内容没有生效可能遇到的问题新增项目扩展 支持设置项目权限【公开】 <RadioGroup><Radio value"private" className"radio"><Icon type"lock" />私有<br …

docker镜像源配置教程,以及解决安装好docker配置镜像源后,出现报错。Job for docker.service failed

Job for docker.service failed because start of the service was attempted too often. See "systemctl status docker.service" and "journalctl -xe" for details.解决后效果&#xff1a;1、进入/etc/docker目录cd /etc/docker2、创建daemon.json文件并…

安卓264和265编码器回调编码数据写入文件的方法

一、写入文件 1、变量定义 private FileOutputStream m265FileOutputStream null; private File m265File null; private static final String HEVC_265_FILE_NAME "output.265"; // 或 .265 private static final String AVC_264_FILE_NAME "output.264&qu…

【基础完全搜索】USACO Bronze 2019 January - 猜动物Guess the Animal

题目描述 当奶牛贝茜和她的朋友艾尔西玩腻了常见的贝壳游戏后&#xff0c;她们喜欢玩另一个经典游戏"猜动物"。 游戏开始时&#xff0c;贝茜会在心中选定一种动物&#xff08;大多数时候她都会选奶牛&#xff0c;这让游戏变得相当无聊&#xff0c;不过偶尔贝茜也会…