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
英文地址,請注明出處:http://en.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;不過偶爾貝茜也會…