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

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.lryc.cn/news/610465.html

相关文章:

  • 可视化图解算法57:字符串的排列
  • 简要探讨大型语言模型(LLMs)的发展历史
  • AI编程助手:终结996的新希望
  • [激光原理与应用-134]:光学器件 - 图解透镜原理和元件
  • 实现三通道转单通道(灰度图)的两种加权方法
  • Pixel 4D 3.4.4.0 | 支持丰富的壁纸资源,高清画质,高度的个性化设置能力,智能推荐功能
  • Coze Loop:开源智能体自动化流程编排平台原理与实践
  • 可重复读(Repeatable Read)能解决幻读吗?
  • 【unitrix】 7.1 二进制位加法(bit_add.rs)
  • Minio部署和客户端使用 - 版本 2025-05-24T17-08-30Z
  • 县级融媒体中心备份与恢复策略(精简版3-2-1架构)
  • Javascript面试题及详细答案150道(046-060)
  • Linux 交换空间管理
  • 15个命令上手Linux!
  • 力扣top100--哈希
  • PandasAI连接LLM对MySQL数据库进行数据分析
  • 【笔记】重学单片机(51)(下)
  • ArcGIS的字段计算器生成随机数
  • 数据库提权
  • 并发编程常用工具类(下):CyclicBarrier 与 Phaser 的协同应用
  • (论文速读)RMT:Retentive+ViT的视觉新骨干
  • Hadoop HDFS 3.3.4 讲解~
  • 嵌入式知识篇---闪存
  • mysql 数据库系统坏了,物理拷贝出数据怎么读取
  • Deepoc 赋能送餐机器人:从机械执行到具身智能的革命性跨越
  • JavaScript 中的流程控制语句详解
  • 机器学习实战:逻辑回归深度解析与欺诈检测评估指标详解(二)
  • Redis缓存详解及常见问题解决方案
  • MySQL 基本操作入门指南
  • MCP进阶:工业协议与AI智能体的融合革命