大家好,今天給各位分享說(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作用域的答案你都知道了嗎?歡迎再次光臨本站哦!