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

原文出處: oKong

前言

之前幾個章節(jié),大部分都是算介紹springboot的一些外圍配置,比如日志配置等次员。這章節(jié)開始过蹂,開始總結(jié)一些關(guān)于springboot的綜合開發(fā)的知識點。由于SpringBoot本身是基于SpringSpringMvc等各類spring家族的一個解決方案企软,可快速進(jìn)行集合。故相關(guān)知識點其實大部分都是基于spring或者springmvc既有的知識點的。本章節(jié)逐样,主要講解的是關(guān)于web開發(fā)springboot獨有的一些常用注解進(jìn)行說明。

常用注解

@SpringBootApplication

前幾章打肝,在系統(tǒng)啟動類里面脂新,都加入了此啟動注解,此注解是個組合注解粗梭,包括了@SpringBootConfiguration争便、@EnableAutoConfiguration@ComponentScan注解。

  • @SpringBootConfiguration 繼承至@Configuration断医,對于熟悉spring的開發(fā)者而言滞乙,此標(biāo)注當(dāng)前類是配置類奏纪,并會將當(dāng)前類內(nèi)聲明的一個或多個以@Bean注解標(biāo)記的方法的實例納入到srping容器中,并且實例名就是方法名斩启。
  • @EnableAutoConfiguration 這個注解就是springboot能自動進(jìn)行配置的魔法所在了序调。主要是通過此注解,能所有符合自動配置條件的bean的定義加載到spring容器中兔簇,比如根據(jù)spring-boot-starter-web 发绢,來判斷你的項目是否需要添加了webmvctomcat,就會自動的幫你配置web項目中所需要的默認(rèn)配置男韧。具體的使用朴摊,會在后期自定義實現(xiàn)一個自動啟動類時,會講解到它的一些機制此虑。此章節(jié)就不深入了甚纲,只需要它是這個用途即可,一般上也單獨使用不要這個注解朦前,但比如需要排除一些無需自動配置的類時介杆,可利用exclude進(jìn)行排除。
  • @ComponentScan 這個熟悉spring的開發(fā)者也應(yīng)該熟悉韭寸,會掃描當(dāng)前包及其子包下被@Component春哨,@Controller,@Service恩伺,@Repository等注解標(biāo)記的類并納入到spring容器中進(jìn)行管理赴背。

@Controller 和 @RestController

@RestController 是Spring4之后加入的注解,原來在@Controller中返回json需要@ResponseBody來配合晶渠,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody凰荚,默認(rèn)返回json格式。而@Controller是用來創(chuàng)建處理http請求的對象褒脯,一般結(jié)合@RequestMapping使用便瑟。

@RequestMapping

一個用來處理請求地址映射的注解,可用于類或方法上番川。用于類上到涂,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。

常用屬性(摘抄至網(wǎng)絡(luò)):

  • value颁督, method践啄;
    value: 指定請求的實際地址,指定的地址可以是URI Template 模式(后面將會說明)沉御;
    method: 指定請求的method類型往核, GET、POST嚷节、PUT聂儒、DELETE等虎锚;
  • consumes,produces衩婚;
    consumes: 指定處理請求的提交內(nèi)容類型(Content-Type)窜护,例如application/json, text/html;
    produces: 指定返回的內(nèi)容類型,僅當(dāng)request請求頭中的(Accept)類型中包含該指定類型才返回非春;
  • params柱徙,headers;
    params: 指定request中必須包含某些參數(shù)值是奇昙,才讓該方法處理护侮。
    headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求储耐。

常用的基本上就valuemethod了羊初。****其簡化注解有

@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的參數(shù)在reqeust體中,常常結(jié)合前端POST請求什湘,進(jìn)行前后端交互长赞。
  • @ResponseBody注解支持將的參數(shù)在reqeust體中,通常返回json格式給前端闽撤。

@PathVariable得哆、@RequestParam、@RequestAttribute

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

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

  • @RequestAttribute用于訪問由過濾器或攔截器創(chuàng)建的哟旗、預(yù)先存在的請求屬性贩据,效果等同與request.getAttrbute().

@Component、@Service闸餐、@Repository

這三者都是申明一個單例的bean類并納入spring容器中饱亮,后兩者其實都是繼承于@Component

  • @Component 最普通的組件绎巨,可以被注入到spring容器進(jìn)行管理
  • @Repository 作用于持久層
  • @Service 作用于業(yè)務(wù)邏輯層

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

@ModelAttribute

主要是綁定請求參數(shù)到指定對象上场勤。此注解可被用于方法、參數(shù)上歼跟。

  • 運用在參數(shù)上和媳,會將客戶端傳遞過來的參數(shù)按名稱注入到指定對象中,并且會將這個對象自動加入ModelMap中哈街,便于View層使用留瞳;
  • 運用在方法上,會在每一個@RequestMapping標(biāo)注的方法前執(zhí)行骚秦,如果有返回值她倘,則自動將該返回值加入到ModelMap中璧微;

由于現(xiàn)在都采用前后端分離開發(fā),故此注解相對用的較少了硬梁,但對于一些在每次請求前需要進(jìn)行一些額外操作時前硫。使用此注解依然是個選擇,比如進(jìn)行統(tǒng)一的業(yè)務(wù)校驗等荧止,但使用此注解實現(xiàn)類似功能時需要注意屹电,使用異步調(diào)用時,比如callable或者DeferredResult時跃巡,被此注解的方法會執(zhí)行兩次危号,因為異步請求時,是掛起另一個線程去重新執(zhí)行素邪,對于配置了攔截器而已外莲,它們的執(zhí)行順序為

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

攔截器的相關(guān)知識點會在下章進(jìn)行說明,這里只是特殊說明下娘香。解決方案的話可簡單根據(jù)DispatcherType類型進(jìn)行判斷苍狰,異步時對應(yīng)類型為:ASYNC,第一次請求正常為:REQUEST烘绽。

總結(jié)

本章節(jié)主要是闡述了在web開發(fā)時一些常用的注解淋昭,但比如一些像@autowired@resource安接、@Qualifier等在此就不列舉了翔忽,這些都比較簡單。對于開發(fā)者而言這些基本上都了解盏檐。

最后

目前互聯(lián)網(wǎng)上很多大佬都有springboot系列教程歇式,如有雷同,請多多包涵了胡野。本文是作者在電腦前一字一句敲的材失,每一步都是實踐的。若文中有所錯誤之處硫豆,還望提出龙巨,謝謝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊响,一起剝皮案震驚了整個濱河市旨别,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汗茄,老刑警劉巖秸弛,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡递览,警方通過查閱死者的電腦和手機叼屠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绞铃,“玉大人环鲤,你說我怎么就攤上這事≡魇蓿” “怎么了冷离?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纯命。 經(jīng)常有香客問我西剥,道長,這世上最難降的妖魔是什么亿汞? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任瞭空,我火速辦了婚禮,結(jié)果婚禮上疗我,老公的妹妹穿的比我還像新娘咆畏。我一直安慰自己,他們只是感情好吴裤,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布旧找。 她就那樣靜靜地躺著,像睡著了一般麦牺。 火紅的嫁衣襯著肌膚如雪钮蛛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天剖膳,我揣著相機與錄音魏颓,去河邊找鬼。 笑死吱晒,一個胖子當(dāng)著我的面吹牛甸饱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仑濒,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼叹话,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躏精?” 一聲冷哼從身側(cè)響起渣刷,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鹦肿,失蹤者是張志新(化名)和其女友劉穎矗烛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡瞭吃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年碌嘀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片歪架。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡股冗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出和蚪,到底是詐尸還是另有隱情止状,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布攒霹,位于F島的核電站怯疤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏催束。R本人自食惡果不足惜集峦,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抠刺。 院中可真熱鬧塔淤,春花似錦、人聲如沸速妖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罕容。三九已至妨马,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杀赢,已是汗流浹背烘跺。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脂崔,地道東北人滤淳。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像砌左,于是被迫代替她去往敵國和親脖咐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容