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

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

前言

以前幾個章節,大部分都是算介紹springboot的一些外圍配置,好比日誌 配置等。這章節開始,開始總結一些關於springboot的綜合開發的知識點。因爲SpringBoot自己是基於SpringSpringMvc等各種spring家族的一個解決方案,可快速進行集合。故相關知識點其實大部分都是基於spring或者springmvc既有的知識點的。本章節,主要講解的是關於web開發springboot獨有的一些經常使用註解進行說明。html

經常使用註解

@SpringBootApplication

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

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

  • @EnableAutoConfiguration 這個註解就是springboot能自動進行配置的魔法所在了。主要是經過此註解,能全部符合自動配置條件的bean的定義加載到spring容器中,好比根據spring-boot-starter-web ,來判斷你的項目是否須要添加了webmvctomcat,就會自動的幫你配置web項目中所須要的默認配置。具體的使用,會在後期自定義實現一個自動啓動類時,會講解到它的一些機制。此章節就不深刻了,只須要它是這個用途便可,通常上也單獨使用不要這個註解,但好比須要排除一些無需自動配置的類時,可利用exclude進行排除。redis

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

@Controller 和 @RestController

@RestController 是Spring4以後加入的註解,原來在@Controller中返回json須要@ResponseBody來配合,若是直接用@RestController替代@Controller就不須要再配置@ResponseBody,默認返回json格式。而@Controller是用來建立處理http請求的對象,通常結合@RequestMapping使用。json

@RequestMapping

一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。後端

經常使用屬性(摘抄至網絡):tomcat

  • 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值,才能讓該方法處理請求。

經常使用的基本上就valuemethod了。 其簡化註解有springboot

@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做爲參數

PathVariable

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

RequestParam

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

RequestAttribute

@Component、@Service、@Repository

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

  • @Component 最普通的組件,能夠被注入到spring容器進行管理

  • @Repository 做用於持久層

  • @Service 做用於業務邏輯層

一般一些類沒法肯定是使用@Service仍是@Component時,註解使用@Component,好比redis的配置類等

@ModelAttribute

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

  • 運用在參數上,會將客戶端傳遞過來的參數按名稱注入到指定對象中,而且會將這個對象自動加入ModelMap中,便於View層使用;
  • 運用在方法上,會在每個@RequestMapping標註的方法前執行,若是有返回值,則自動將該返回值加入到ModelMap中;

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

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

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

總結

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

最後

目前互聯網上不少大佬都有springboot系列教程,若有雷同,請多多包涵了。本文是做者在電腦前一字一句敲的,每一步都是實踐的。若文中有所錯誤之處,還望提出,謝謝。

老生常談

  • 我的QQ:499452441
  • 微信公衆號:lqdevOps

公衆號

我的博客:https://blog.lqdev.cn

本文地址:https://blog.lqdev.cn/2018/07/16/springboot/chapter-six/

相關文章
相關標籤/搜索