SpringBoot | 第六章:常用註解介紹及簡單使用

来源:https://www.cnblogs.com/aiaitie/archive/2018/08/23/9525551.html
-Advertisement-
Play Games

前言 之前幾個章節,大部分都是算介紹springboot的一些外圍配置,比如日誌配置等。這章節開始,開始總結一些關於springboot的綜合開發的知識點。由於SpringBoot本身是基於Spring和SpringMvc等各類spring家族的一個解決方案,可快速進行集合。故相關知識點其實大部分都 ...


前言

之前幾個章節,大部分都是算介紹springboot的一些外圍配置,比如日誌配置等。這章節開始,開始總結一些關於springboot的綜合開發的知識點。由於SpringBoot本身是基於Spring和SpringMvc等各類spring家族的一個解決方案,可快速進行集合。故相關知識點其實大部分都是基於spring或者springmvc既有的知識點的。本章節,主要講解的是關於web開發及springboot獨有的一些常用註解進行說明。

常用註解

@SpringBootApplication

前幾章,在系統啟動類裡面,都加入了此啟動註解,此註解是個組合註解,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan註解。

  • @SpringBootConfiguration 繼承至@Configuration,對於熟悉spring的開發者而言,此標註當前類是配置類,並會將當前類內聲明的一個或多個以@Bean註解標記的方法的實例納入到srping容器中,並且實例名就是方法名。

  • @EnableAutoConfiguration 這個註解就是springboot能自動進行配置的魔法所在了。主要是通過此註解,能所有符合自動配置條件的bean的定義載入到spring容器中,比如根據spring-boot-starter-web ,來判斷你的項目是否需要添加了webmvc和tomcat,就會自動的幫你配置web項目中所需要的預設配置。具體的使用,會在後期自定義實現一個自動啟動類時,會講解到它的一些機制。此章節就不深入了,只需要它是這個用途即可,一般上也單獨使用不要這個註解,但比如需要排除一些無需自動配置的類時,可利用exclude進行排除。

  • @ComponentScan 這個熟悉spring的開發者也應該熟悉,會掃描當前包及其子包下被@Component,@Controller,@Service,@Repository等註解標記的類並納入到spring容器中進行管理。

@Controller 和 @RestController

@RestController 是Spring4之後加入的註解,原來在@Controller中返回json需要@ResponseBody來配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,預設返回json格式。而@Controller是用來創建處理http請求的對象,一般結合@RequestMapping使用。

@RequestMapping

一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。

常用屬性(摘抄至網路):

  • value, method;

  • value: 指定請求的實際地址,指定的地址可以是URI Template 模式(後面將會說明);

  • method: 指定請求的method類型, GET、POST、PUT、DELETE等;

  • consumes,produces;

  • consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/html;

  • produces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;

  • params,headers;

  • params: 指定request中必須包含某些參數值是,才讓該方法處理。

  • headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。

常用的基本上就value和method了。其簡化註解有

@GetMapping 等同於 @RequestMapping(method = RequestMethod.GET)

@PostMapping 等同於 @RequestMapping(method = RequestMethod.POST)

@PutMapping 等同於 @RequestMapping(method = RequestMethod.PUT)

@DeleteMapping 等同於 @RequestMapping(method = RequestMethod.DELETE)

@PatchMapping 等同於 @RequestMapping(method = RequestMethod.PATCH)

@RequestBody和@ResponseBody

  • @RequestBody註解允許request的參數在reqeust體中,常常結合前端POST請求,進行前後端交互。

  • @ResponseBody註解支持將的參數在reqeust體中,通常返回json格式給前端。

@PathVariable、@RequestParam、@RequestAttribute

  • @PathVariable用來接收參數,如/path/001,可接收001作為參數

 

  • @RequestParam 用來接收URL中的參數,如/param?id=001,可接收001作為參數

 

  • @RequestAttribute用於訪問由過濾器或攔截器創建的、預先存在的請求屬性,效果等同與request.getAttrbute().

 

@Component、@Service、@Repository

這三者都是申明一個單例的bean類並納入spring容器中,後兩者其實都是繼承於@Component。

  • @Component 最普通的組件,可以被註入到spring容器進行管理

  • @Repository 作用於持久層

  • @Service 作用於業務邏輯層

通常一些類無法確定是使用@Service還是@Component時,註解使用@Component,比如redis的配置類等

@ModelAttribute

主要是綁定請求參數到指定對象上。此註解可被用於方法、參數上。

  • 運用在參數上,會將客戶端傳遞過來的參數按名稱註入到指定對象中,並且會將這個對象自動加入ModelMap中,便於View層使用;

  • 運用在方法上,會在每一個@RequestMapping標註的方法前執行,如果有返回值,則自動將該返回值加入到ModelMap中;

由於現在都採用前後端分離開發,故此註解相對用的較少了,但對於一些在每次請求前需要進行一些額外操作時。使用此註解依然是個選擇,比如進行統一的業務校驗等,但使用此註解實現類似功能時需要註意,使用非同步調用時,比如callable或者DeferredResult時,被此註解的方法會執行兩次,因為非同步請求時,是掛起另一個線程去重新執行,對於配置了攔截器而已,它們的執行順序為

1

preHandle ---->afterConcurrentHandlingStarted ----> Controller---->preHandler----> postHandler ----> afterCompletion

攔截器的相關知識點會在下章進行說明,這裡只是特殊說明下。解決方案的話可簡單根據DispatcherType類型進行判斷,非同步時對應類型為:ASYNC,第一次請求正常為:REQUEST。

總結

本章節主要是闡述了在web開發時一些常用的註解,但比如一些像@autowired、@resource、@Qualifier等在此就不列舉了,這些都比較簡單。對於開發者而言這些基本上都瞭解。

如果你現在在JAVA這條路上掙扎,也想在IT行業拿高薪,可以參加我們的訓練營課程,選擇最適合自己的課程學習,技術大牛親授,7個月後,進入名企拿高薪。我們的課程內容有:Java工程化、高性能及分散式、高性能、高架構、性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點。如果你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優勢的,想進阿裡面試但擔心面試不過的,你都可以來,q群號為:835638062

 

註:加群要求

 

1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

 

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

 

3、如果沒有工作經驗,但基礎非常扎實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

 

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

 

5.阿裡Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • @charset "UTF-8"; /*!Animate.css - http://daneden.me/animateLicensed under the MIT license - http://opensource.org/licenses/MIT Copyright (c) 2015 Dan ...
  • <!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" conten ...
  • 一般來講深複製主要是為了複製js對象中的引用類型,引用類型在普通的賦值操作下相當於是引用,修改複製對象也會影響原對象,簡單的方法的話可以使用JSON.parse(JSON.stringify(obj)) 來實現深複製 然而這是沒有考慮對象中有函數的情況,用var b = JSON.parse(JSO ...
  • html js ...
  • 問題描述: 函數的結構如上圖所示,在調用該函數的時候,瀏覽器報錯: 分析原因: 在 js 的語法中,如果語句獨占一行,通常可以省略句末的分號 但實際上 js 解析代碼的時候,只有在句末缺少分號就無法正常運行的時候,才會自動填補分號 如果前後的語句能夠組成一個語法正確的語句,則不會自動填補分號 上面的 ...
  • 最近在項目中有這麼一個需求,就是上傳一個視頻文件,然後要獲取視頻文件的第一幀圖片,這個可以通過canvas獲取得到,得到的是一個dataURL,之後還要將這個圖片上傳到雲,這個時候如何操作就不清楚了,於是乎,google一番,總結如下: 將dataURL轉成Blob 利用formData 非同步上傳 ...
  • 工廠方法模式分為三種: 一、普通工廠模式,就是建立一個工廠類,對實現了同一介面的一些類進行實例的創建。首先看下關係圖: 舉例如下:(我們舉一個發送郵件和簡訊的例子) 首先,創建二者的共同介面: 其次,創建實現類: 最後,建工廠類: 我們來測試下: 輸出:this is sms sender! 二、多 ...
  • TCP的三次握手與四次揮手 一、TCP(Transmission Control Protocol 傳輸控制協議) 二、TCP報文段(封裝在IP數據報中) 1、埠號1)源埠號:發送方進程對應的埠號,源IP和埠的作用就是標誌報文的返回地址。2)目標埠號:對應的是接收端的進程,接收端收到數據段 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...