中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

SpringBoot | 第六章:常用注解介紹及簡(jiǎn)單使用

2018-08-06    來(lái)源:importnew

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

前言

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

常用注解

@SpringBootApplication

前幾章,在系統(tǒng)啟動(dòng)類(lèi)里面,都加入了此啟動(dòng)注解,此注解是個(gè)組合注解,包括了@SpringBootConfiguration、@EnableAutoConfiguration@ComponentScan注解。

  • @SpringBootConfiguration 繼承至@Configuration,對(duì)于熟悉spring的開(kāi)發(fā)者而言,此標(biāo)注當(dāng)前類(lèi)是配置類(lèi),并會(huì)將當(dāng)前類(lèi)內(nèi)聲明的一個(gè)或多個(gè)以@Bean注解標(biāo)記的方法的實(shí)例納入到srping容器中,并且實(shí)例名就是方法名。
  • @EnableAutoConfiguration 這個(gè)注解就是springboot能自動(dòng)進(jìn)行配置的魔法所在了。主要是通過(guò)此注解,能所有符合自動(dòng)配置條件的bean的定義加載到spring容器中,比如根據(jù)spring-boot-starter-web?,來(lái)判斷你的項(xiàng)目是否需要添加了webmvctomcat,就會(huì)自動(dòng)的幫你配置web項(xiàng)目中所需要的默認(rèn)配置。具體的使用,會(huì)在后期自定義實(shí)現(xiàn)一個(gè)自動(dòng)啟動(dòng)類(lèi)時(shí),會(huì)講解到它的一些機(jī)制。此章節(jié)就不深入了,只需要它是這個(gè)用途即可,一般上也單獨(dú)使用不要這個(gè)注解,但比如需要排除一些無(wú)需自動(dòng)配置的類(lèi)時(shí),可利用exclude進(jìn)行排除。
  • @ComponentScan 這個(gè)熟悉spring的開(kāi)發(fā)者也應(yīng)該熟悉,會(huì)掃描當(dāng)前包及其子包下被@Component,@Controller,@Service,@Repository等注解標(biāo)記的類(lèi)并納入到spring容器中進(jìn)行管理。

@Controller 和 @RestController

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

@RequestMapping

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

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

  • value, method;
    value: 指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template 模式(后面將會(huì)說(shuō)明);
    method: 指定請(qǐng)求的method類(lèi)型, GET、POST、PUT、DELETE等;
  • consumes,produces;
    consumes: 指定處理請(qǐng)求的提交內(nèi)容類(lèi)型(Content-Type),例如application/json, text/html;
    produces: 指定返回的內(nèi)容類(lèi)型,僅當(dāng)request請(qǐng)求頭中的(Accept)類(lèi)型中包含該指定類(lèi)型才返回;
  • params,headers;
    params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理。
    headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求。

常用的基本上就valuemethod了。其簡(jiǎn)化注解有

@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請(qǐng)求,進(jìn)行前后端交互。
  • @ResponseBody注解支持將的參數(shù)在reqeust體中,通常返回json格式給前端。

@PathVariable、@RequestParam、@RequestAttribute

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

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

  • @RequestAttribute用于訪問(wèn)由過(guò)濾器或攔截器創(chuàng)建的、預(yù)先存在的請(qǐng)求屬性,效果等同與request.getAttrbute().

@Component、@Service、@Repository

這三者都是申明一個(gè)單例的bean類(lèi)并納入spring容器中,后兩者其實(shí)都是繼承于@Component。

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

通常一些類(lèi)無(wú)法確定是使用@Service還是@Component時(shí),注解使用@Component,比如redis的配置類(lèi)等

@ModelAttribute

主要是綁定請(qǐng)求參數(shù)到指定對(duì)象上。此注解可被用于方法、參數(shù)上。

  • 運(yùn)用在參數(shù)上,會(huì)將客戶(hù)端傳遞過(guò)來(lái)的參數(shù)按名稱(chēng)注入到指定對(duì)象中,并且會(huì)將這個(gè)對(duì)象自動(dòng)加入ModelMap中,便于View層使用;
  • 運(yùn)用在方法上,會(huì)在每一個(gè)@RequestMapping標(biāo)注的方法前執(zhí)行,如果有返回值,則自動(dòng)將該返回值加入到ModelMap中;

由于現(xiàn)在都采用前后端分離開(kāi)發(fā),故此注解相對(duì)用的較少了,但對(duì)于一些在每次請(qǐng)求前需要進(jìn)行一些額外操作時(shí)。使用此注解依然是個(gè)選擇,比如進(jìn)行統(tǒng)一的業(yè)務(wù)校驗(yàn)等,但使用此注解實(shí)現(xiàn)類(lèi)似功能時(shí)需要注意,使用異步調(diào)用時(shí),比如callable或者DeferredResult時(shí),被此注解的方法會(huì)執(zhí)行兩次,因?yàn)楫惒秸?qǐng)求時(shí),是掛起另一個(gè)線程去重新執(zhí)行,對(duì)于配置了攔截器而已,它們的執(zhí)行順序?yàn)?/strong>

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

攔截器的相關(guān)知識(shí)點(diǎn)會(huì)在下章進(jìn)行說(shuō)明,這里只是特殊說(shuō)明下。解決方案的話(huà)可簡(jiǎn)單根據(jù)DispatcherType類(lèi)型進(jìn)行判斷,異步時(shí)對(duì)應(yīng)類(lèi)型為:ASYNC,第一次請(qǐng)求正常為:REQUEST。

總結(jié)

本章節(jié)主要是闡述了在web開(kāi)發(fā)時(shí)一些常用的注解,但比如一些像@autowired、@resource@Qualifier等在此就不列舉了,這些都比較簡(jiǎn)單。對(duì)于開(kāi)發(fā)者而言這些基本上都了解。

最后

目前互聯(lián)網(wǎng)上很多大佬都有springboot系列教程,如有雷同,請(qǐng)多多包涵了。本文是作者在電腦前一字一句敲的,每一步都是實(shí)踐的。若文中有所錯(cuò)誤之處,還望提出,謝謝。

標(biāo)簽: isp 互聯(lián)網(wǎng) 開(kāi)發(fā)者 網(wǎng)絡(luò)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:SpringBoot | 第七章:過(guò)濾器、監(jiān)聽(tīng)器、攔截器

下一篇:在 Java 的反射中,Class.forName 和 ClassLoader 的區(qū)別