當前位置:
首頁 > 知識 > SpringBoot | 第六章:常用註解介紹及簡單使用

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

(點擊

上方公眾號

,可快速關注)




來源:oKong ,


blog.lqdev.cn/2018/07/16/springboot/chapter-six/




前言



之前幾個章節,大部分都是算介紹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時,被此註解的方法會執行兩次,因為非同步請求時,是掛起另一個線程去重新執行,對於配置了攔截器而已,它們的執行順序為





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




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




總結




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




最後





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




系列






  • SpringBoot | 第一章:第一個 SpringBoot 應用



  • SpringBoot | 第二章:lombok 介紹及簡單使用



  • SpringBoot | 第三章:springboot 配置詳解



  • SpringBoot | 第四章:日誌管理



  • SpringBoot | 第五章:多環境配置




【關於投稿】




如果大家有原創好文投稿,請直接給公號發送留言。




① 留言格式:


【投稿】+《 文章標題》+ 文章鏈接

② 示例:


【投稿】《不要自稱是程序員,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/

③ 最後請附上您的個人簡介哈~






看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

塵埃落定,JDK 11 確定將引入 Shebang #! 符號
SpringBoot | 第二章:lombok 介紹及簡單使用

TAG:ImportNew |