- N +

說(shuō)出springmvc常用的5個(gè)注解(spring bean作用域)

大家好,今天給各位分享說(shuō)出springmvc常用的5個(gè)注解的一些知識(shí),其中也會(huì)對(duì)spring bean作用域進(jìn)行解釋?zhuān)恼缕赡芷L(zhǎng),如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在就馬上開(kāi)始吧!

springmvc中@PathVariable和@RequestParam的區(qū)別

1、@PathVariable

當(dāng)使用@RequestMappingURItemplate樣式映射時(shí),即someUrl/{paramId},這時(shí)的paramId可通過(guò)@Pathvariable注解綁定它傳過(guò)來(lái)的值到方法的參數(shù)上。

示例代碼:

@Controller

@RequestMapping("/owners/{ownerId}")

publicclassRelativePathUriTemplateController{

@RequestMapping("/pets/{petId}")

publicvoidfindPet(@PathVariableStringownerId,@PathVariableStringpetId,Modelmodel){

//implementationomitted

}

}

上面代碼把URItemplate中變量ownerId的值和petId的值,綁定到方法的參數(shù)上。若方法參數(shù)名稱(chēng)和需要綁定的uritemplate中變量名稱(chēng)不一致,需要在@PathVariable("name")指定uritemplate中的名稱(chēng)。

2、@RequestHeader、@CookieValue

@RequestHeader注解,可以把Request請(qǐng)求header部分的值綁定到方法的參數(shù)上。

示例代碼:

這是一個(gè)Request的header部分:

Hostlocalhost:8080

Accepttext/html,application/xhtml+xml,application/xml;q=0.9

Accept-Languagefr,en-gb;q=0.7,en;q=0.3

Accept-Encodinggzip,deflate

Accept-CharsetISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive300

@RequestMapping("/displayHeaderInfo.do")

publicvoiddisplayHeaderInfo(@RequestHeader("Accept-Encoding")Stringencoding,

@RequestHeader("Keep-Alive")longkeepAlive){

}

上面的代碼,把requestheader部分的Accept-Encoding的值,綁定到參數(shù)encoding上了,Keep-Aliveheader的值綁定到參數(shù)keepAlive上。

@CookieValue可以把Requestheader中關(guān)于cookie的值綁定到方法的參數(shù)上。

例如有如下Cookie值:

JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

參數(shù)綁定的代碼:

@RequestMapping("/displayHeaderInfo.do")

publicvoiddisplayHeaderInfo(@CookieValue("JSESSIONID")Stringcookie){

}

即把JSESSIONID的值綁定到參數(shù)cookie上。

3、@RequestParam,@RequestBody

@RequestParam

A)常用來(lái)處理簡(jiǎn)單類(lèi)型的綁定,通過(guò)Request.getParameter()獲取的String可直接轉(zhuǎn)換為簡(jiǎn)單類(lèi)型的情況(String-->簡(jiǎn)單類(lèi)型的轉(zhuǎn)換操作由ConversionService配置的轉(zhuǎn)換器來(lái)完成);因?yàn)槭褂胷equest.getParameter()方式獲取參數(shù),所以可以處理get方式中queryString的值,也可以處理post方式中bodydata的值;

B)用來(lái)處理Content-Type:為application/x-www-form-urlencoded編碼的內(nèi)容,提交方式GET、POST;

C)該注解有兩個(gè)屬性:value、required;value用來(lái)指定要傳入值的id名稱(chēng),required用來(lái)指示參數(shù)是否必須綁定;

示例代碼:

@Controller

@RequestMapping("/pets")

@SessionAttributes("pet")

publicclassEditPetForm{

@RequestMapping(method=RequestMethod.GET)

publicStringsetupForm(@RequestParam("petId")intpetId,ModelMapmodel){

Petpet=this.clinic.loadPet(petId);

model.addAttribute("pet",pet);

return"petForm";

}

@RequestBody

該注解常用來(lái)處理Content-Type:不是application/x-www-form-urlencoded編碼的內(nèi)容,例如application/json,application/xml等;

它是通過(guò)使用HandlerAdapter配置的HttpMessageConverters來(lái)解析postdatabody,然后綁定到相應(yīng)的bean上的。

因?yàn)榕渲糜蠪ormHttpMessageConverter,所以也可以用來(lái)處理application/x-www-form-urlencoded的內(nèi)容,處理完的結(jié)果放在一個(gè)MultiValueMap<String,String>里,這種情況在某些特殊需求下使用,詳情查看FormHttpMessageConverterapi;

springcloud feign微服務(wù)調(diào)用原理

SpringCloudFeign是一個(gè)基于NetflixFeign的聲明式WebService客戶(hù)端庫(kù),它簡(jiǎn)化了構(gòu)建基于HTTP請(qǐng)求/響應(yīng)服務(wù)的客戶(hù)端的方式,并提供了一種統(tǒng)一的、聲明式的方式來(lái)調(diào)用微服務(wù)。下面介紹一下SpringCloudFeign微服務(wù)調(diào)用的原理:

在使用Feign調(diào)用其他微服務(wù)時(shí),首先需要定義一個(gè)接口來(lái)描述需要調(diào)用的服務(wù)及其API。這個(gè)接口可以看作是該服務(wù)的契約,它定義了與服務(wù)交互的方法和請(qǐng)求參數(shù)、返回值等信息。在定義接口時(shí),可以使用SpringMVC注解來(lái)描述請(qǐng)求路徑、請(qǐng)求參數(shù)等信息,這些注解將會(huì)被Feign自動(dòng)解析,并生成符合要求的HTTP請(qǐng)求。

接著,通過(guò)使用SpringCloudFeign中的@EnableFeignClients注解來(lái)啟用Feign客戶(hù)端功能,同時(shí)通過(guò)指定要掃描的包和Feign配置類(lèi)等參數(shù),完成對(duì)Feign的初始化和配置工作。

在應(yīng)用程序運(yùn)行時(shí),F(xiàn)eign將根據(jù)接口定義創(chuàng)建出具體的代理對(duì)象,并通過(guò)Ribbon或者Eureka等負(fù)載均衡組件選擇目標(biāo)服務(wù)的一個(gè)或多個(gè)實(shí)例。然后,通過(guò)動(dòng)態(tài)代理技術(shù)將調(diào)用請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的實(shí)例,并將接收到的響應(yīng)結(jié)果返回給應(yīng)用程序。

總的來(lái)說(shuō),SpringCloudFeign的微服務(wù)調(diào)用原理主要包括四個(gè)步驟:定義服務(wù)契約接口、啟用Feign客戶(hù)端、創(chuàng)建代理對(duì)象和請(qǐng)求轉(zhuǎn)發(fā)。通過(guò)這些步驟,可以實(shí)現(xiàn)對(duì)其他微服務(wù)的方便、快捷調(diào)用,提高了微服務(wù)架構(gòu)下各個(gè)服務(wù)之間的互聯(lián)互通能力。

springmvc原理及流程

第一步:用戶(hù)發(fā)起請(qǐng)求到前端控制器(DispatcherServlet)

第二步:前端控制器請(qǐng)求處理器映射器(HandlerMappering)去查找處理器(Handle):通過(guò)xml配置或者注解進(jìn)行查找

第三步:找到以后處理器映射器(HandlerMappering)像前端控制器返回執(zhí)行鏈(HandlerExecutionChain)

第四步:前端控制器(DispatcherServlet)調(diào)用處理器適配器(HandlerAdapter)去執(zhí)行處理器(Handler)

第五步:處理器適配器去執(zhí)行Handler

第六步:Handler執(zhí)行完給處理器適配器返回ModelAndView

第七步:處理器適配器向前端控制器返回ModelAndView

第八步:前端控制器請(qǐng)求視圖解析器(ViewResolver)去進(jìn)行視圖解析

第九步:視圖解析器像前端控制器返回View

第十步:前端控制器對(duì)視圖進(jìn)行渲染

第十一步:前端控制器向用戶(hù)響應(yīng)結(jié)果

springmvc怎樣進(jìn)行事務(wù)控制

在你的service方法上一行啟用事務(wù)注解就可以了,這是對(duì)整個(gè)service方法進(jìn)行事務(wù)管理而不是service方法里頭的單個(gè)方法。

springmvc的工作流程是什么

spring工作的流程

流程如下:

1、用戶(hù)發(fā)起請(qǐng)求到前端控制器(DispatcherServlet),該控制器會(huì)過(guò)濾出哪些請(qǐng)求可以訪問(wèn)Servlet、哪些不能訪問(wèn)。就是url-pattern的作用,并且會(huì)加載springmvc.xml配置文件。

2、前端控制器會(huì)找到處理器映射器(HandlerMapping),通過(guò)HandlerMapping完成url到controller映射的組件,簡(jiǎn)單來(lái)說(shuō),就是將在springmvc.xml中配置的或者注解的url與對(duì)應(yīng)的處理類(lèi)找到并進(jìn)行存儲(chǔ),用map<url,handler>這樣的方式來(lái)存儲(chǔ)。

3、HandlerMapping有了映射關(guān)系,并且找到url對(duì)應(yīng)的處理器,HandlerMapping就會(huì)將其處理器(Handler)返回,在返回前,會(huì)加上很多攔截器。

4、DispatcherServlet拿到Handler后,找到HandlerAdapter(處理器適配器),通過(guò)它來(lái)訪問(wèn)處理器,并執(zhí)行處理器。

5、執(zhí)行處理器

6、處理器會(huì)返回一個(gè)ModelAndView對(duì)象給HandlerAdapter

7、通過(guò)HandlerAdapter將ModelAndView對(duì)象返回給前端控制器(DispatcherServlet)

8、前端控制器請(qǐng)求視圖解析器(ViewResolver)去進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(jsp),其實(shí)就是將ModelAndView對(duì)象中存放視圖的名稱(chēng)進(jìn)行查找,找到對(duì)應(yīng)的頁(yè)面形成視圖對(duì)象

9、返回視圖對(duì)象到前端控制器。

10、視圖渲染,就是將ModelAndView對(duì)象中的數(shù)據(jù)放到request域中,用來(lái)讓頁(yè)面加載數(shù)據(jù)的。

11、通過(guò)第8步,通過(guò)名稱(chēng)找到了對(duì)應(yīng)的頁(yè)面,通過(guò)第10步,request域中有了所需要的數(shù)據(jù),那么就能夠進(jìn)行視圖渲染了。最后將其返回即可。

文章分享結(jié)束,說(shuō)出springmvc常用的5個(gè)注解和spring bean作用域的答案你都知道了嗎?歡迎再次光臨本站哦!

返回列表
上一篇:
下一篇: