成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

spring mvc 常用注解標(biāo)簽詳解【轉(zhuǎn)載】

Kylin_Mountain / 1919人閱讀

摘要:分發(fā)處理器將會(huì)掃描使用了該注解的類的方法,并檢測(cè)該方法是否使用了注解。的作用相當(dāng)于,只不過(guò)按照自動(dòng)注入。作用該注解用于將的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)霓D(zhuǎn)換為指定格式后,寫入到對(duì)象的數(shù)據(jù)區(qū)。用于注解層,在類上面注解。

原文地址

Controller

在SpringMVC中,控制器Controller負(fù)責(zé)處理由DispatcherServlet分發(fā)的請(qǐng)求,它把用戶請(qǐng)求的數(shù)據(jù)經(jīng)過(guò)業(yè)務(wù)處理層處理之后封裝成一個(gè)Model,然后再把該Model返回給對(duì)應(yīng)的View進(jìn)行展示。在SpringMVC中提供了一個(gè)非常漸變的定義Controller的方法,你無(wú)需繼承特定的類或?qū)崿F(xiàn)特定的接口,只需使用@Controller標(biāo)記一個(gè)類是Controller,然后使用@RequestMapping和@RequestParam等一些注解用以定義URL請(qǐng)求和Controller方法之間的映射,這樣的Controller就能被外界訪問(wèn)到。此外Controller不會(huì)直接依賴于HttpServletRequest和HttpServletResponse等HttpServlet對(duì)象,它們可以通過(guò)Controller的方法參數(shù)靈活的獲取到。

@Controller用于標(biāo)記在一個(gè)類上,使用它標(biāo)記的類就是一個(gè)SpringMVC Controller對(duì)象。分發(fā)處理器將會(huì)掃描使用了該注解的類的方法,并檢測(cè)該方法是否使用了@RequestMapping注解。@Controller只是定義了一個(gè)控制器類,而使用@RequestMapping注解的方法才是真正處理請(qǐng)求的處理器。單單使用@Controller標(biāo)記在一個(gè)類上還不能真正意義上的說(shuō)它就是SpringMVC的一個(gè)控制器類,因?yàn)檫@個(gè)時(shí)候Spring還不認(rèn)識(shí)它。那么要如何做Spring才能認(rèn)識(shí)它呢?這個(gè)時(shí)候就需要我們把這個(gè)控制器類交給Spring管理。有兩種方式:

在SpringMVC 的配置文件中定義MyController的bean對(duì)象

在SpringMVC 的配置文件中告訴Spring該到哪里去找標(biāo)記為@Controller 的Controller控制器




< context:component-scan base-package = "com.host.app.web" />//路徑寫到controller的上一層(掃描包詳解見下面淺析)
RequestMapping

RequestMapping是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。
RequestMapping注解有六個(gè)屬性,下面我們把她分成三類進(jìn)行說(shuō)明(下面有相應(yīng)實(shí)例)

value,method;

value: 指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template模式;
method:指定請(qǐng)求的method類型,GET、POST、PUT、DELETE等;

consumes,produces

consumes:指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),例如application/json,text/html;
produces:指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才返回;

params,headers

params:指定request中必須包含某些參數(shù)值,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求。


@Resource和@Autowired

@Resource和@Autowired都是做bean的注入時(shí)使用,其實(shí)@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要導(dǎo)入,但是Spring支持該注解的注入。

1、共同點(diǎn)

兩者都可以寫在字段和setter方法上。兩者如果都寫在字段上,那么就不需要再寫setter方法。

2、不同點(diǎn)

(1)@Autowired

@Autowired為Spring提供的注解,需要導(dǎo)入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

public class TestServiceImpl {

// 下面兩種@Autowired只要使用一種即可
@Autowired
private UserDao userDao; // 用于字段上

@Autowired
public void setUserDao(UserDao userDao) { // 用于屬性的方法上
    this.userDao = userDao;
}

}

@Autowired注解是按照類型(byType)裝配依賴對(duì)象,默認(rèn)情況下它要求依賴對(duì)象必須存在,如果允許null值,可以設(shè)置它的required屬性為false。如果我們想使用按照名稱(byName)來(lái)裝配,可以結(jié)合@Qualifier注解一起使用。如下:

public class TestServiceImpl {

@Autowired
@Qualifier("userDao")
private UserDao userDao; 

}

(2)@Resource

@Resource默認(rèn)按照ByName自動(dòng)注入,由J2EE提供,需要導(dǎo)入包javax.annotation.Resource。@Resource有兩個(gè)重要的屬性:name和type,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以,如果使用name屬性,則使用byName的自動(dòng)注入策略,而使用type屬性時(shí)則使用byType自動(dòng)注入策略。如果既不制定name也不制定type屬性,這時(shí)將通過(guò)反射機(jī)制使用byName自動(dòng)注入策略。

public class TestServiceImpl {

// 下面兩種@Resource只要使用一種即可
@Resource(name="userDao")
private UserDao userDao; // 用于字段上

@Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 用于屬性的setter方法上
    this.userDao = userDao;
}

}
注:最好是將@Resource放在setter方法上,因?yàn)檫@樣更符合面向?qū)ο蟮乃枷?,通過(guò)set、get去操作屬性,而不是直接去操作屬性。

@Resource裝配順序:

①如果同時(shí)指定了name和type,則從Spring上下文中找到唯一匹配的bean進(jìn)行裝配,找不到則拋出異常。

②如果指定了name,則從上下文中查找名稱(id)匹配的bean進(jìn)行裝配,找不到則拋出異常。

③如果指定了type,則從上下文中找到類似匹配的唯一bean進(jìn)行裝配,找不到或是找到多個(gè),都會(huì)拋出異常。

④如果既沒有指定name,又沒有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒有匹配,則回退為一個(gè)原始類型進(jìn)行匹配,如果匹配則自動(dòng)裝配。

@Resource的作用相當(dāng)于@Autowired,只不過(guò)@Autowired按照byType自動(dòng)注入。

4、@ModelAttribute和 @SessionAttributes

代表的是:該Controller的所有方法在調(diào)用前,先執(zhí)行此@ModelAttribute方法,可用于注解和方法參數(shù)中,可以把這個(gè)@ModelAttribute特性,應(yīng)用在BaseController當(dāng)中,所有的Controller繼承BaseController,即可實(shí)現(xiàn)在調(diào)用Controller時(shí),先執(zhí)行@ModelAttribute方法。

@SessionAttributes即將值放到session作用域中,寫在class上面。

具體示例參見下面:使用 @ModelAttribute 和 @SessionAttributes 傳遞和保存數(shù)據(jù)

5、@PathVariable

用于將請(qǐng)求URL中的模板變量映射到功能處理方法的參數(shù)上,即取出uri模板中的變量作為參數(shù)。如:
@Controller
public class TestController {

 @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
 public String getLogin(@PathVariable("userId") String userId,  
     @PathVariable("roleId") String roleId){  
     System.out.println("User Id : " + userId);  
     System.out.println("Role Id : " + roleId);  
     return "hello";  
 }  
 @RequestMapping(value="/product/{productId}",method = RequestMethod.GET)  
 public String getProduct(@PathVariable("productId") String productId){  
       System.out.println("Product Id : " + productId);  
       return "hello";  
 }  
 @RequestMapping(value="/javabeat/{regexp1:[a-z-]+}",  
       method = RequestMethod.GET)  
 public String getRegExp(@PathVariable("regexp1") String regexp1){  
       System.out.println("URI Part 1 : " + regexp1);  
       return "hello";  
 }  

}

6、@requestParam

@requestParam主要用于在SpringMVC后臺(tái)控制層獲取參數(shù),類似一種是request.getParameter("name"),它有三個(gè)常用參數(shù):defaultValue = "0", required = false, value = "isApp";defaultValue 表示設(shè)置默認(rèn)值,required 銅過(guò)boolean設(shè)置是否是必須要傳入的參數(shù),value 值表示接受的傳入的參數(shù)類型。

7、@ResponseBody

作用: 該注解用于將Controller的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫入到Response對(duì)象的body數(shù)據(jù)區(qū)。

使用時(shí)機(jī):返回的數(shù)據(jù)不是html標(biāo)簽的頁(yè)面,而是其他某種格式的數(shù)據(jù)時(shí)(如json、xml等)使用;

8、@Component

相當(dāng)于通用的注解,當(dāng)不知道一些類歸到哪個(gè)層時(shí)使用,但是不建議。

9、@Repository

用于注解dao層,在daoImpl類上面注解。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67479.html

相關(guān)文章

  • 通過(guò)項(xiàng)目逐步深入了解Spring MVC(一)

    摘要:是一個(gè)基于的框架??刂破鲗⒁晥D響應(yīng)給用戶通過(guò)視圖展示給用戶要的數(shù)據(jù)或處理結(jié)果。有了減少了其它組件之間的耦合度。 相關(guān)閱讀: 本文檔和項(xiàng)目代碼地址:https://github.com/zhisheng17/springmvc 轉(zhuǎn)載請(qǐng)注明出處和保留以上文字! 了解 Spring: Spring 官網(wǎng):http://spring.io/ 一個(gè)好的東西一般都會(huì)有一個(gè)好的文檔解釋說(shuō)明,如果你...

    whataa 評(píng)論0 收藏0
  • SpringMVC學(xué)習(xí)筆記

    摘要:是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。協(xié)議,是一個(gè)無(wú)狀態(tài)協(xié)議,即所有的狀態(tài)都保存在服務(wù)器端。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是表現(xiàn)層狀態(tài)轉(zhuǎn)化。具體說(shuō),就是協(xié)議里面,四個(gè)表示操作方式的動(dòng)詞。 一、SpringMVC概述 Spring為展現(xiàn)層提供的基于MVC設(shè)計(jì)理念的優(yōu)秀的Web框架,是目前最主流的MVC框架之一 Spring3.0之后全面超越Struts2,成為最優(yōu)秀的MVC框架 S...

    roundstones 評(píng)論0 收藏0
  • [轉(zhuǎn)載]使用IntelliJ IDEA開發(fā)SpringMVC網(wǎng)站(二)框架配置

    摘要:為了能夠處理中文的請(qǐng)求,再配置一個(gè),以避免請(qǐng)求中文出現(xiàn)亂碼情況至此,配置完畢。一般為一些基本的,用于進(jìn)行相應(yīng)的頁(yè)面顯示,用于處理網(wǎng)站的請(qǐng)求?,F(xiàn)在,需要配置來(lái)運(yùn)行該項(xiàng)目。 摘要講解如何配置SpringMVC框架xml,以及如何在Tomcat中運(yùn)行轉(zhuǎn)載請(qǐng)注明出處:Gaussic(一個(gè)致力于AI研究卻不得不兼顧項(xiàng)目的研究生)。 注:此文承接上一文:使用IntelliJ IDEA開發(fā)Sprin...

    baukh789 評(píng)論0 收藏0
  • Spring MVC概念

    摘要:在中,就是前端控制器的任務(wù)是將請(qǐng)求發(fā)送給控制器。處理器映射會(huì)根據(jù)請(qǐng)求所攜帶的信息來(lái)進(jìn)行決策一旦選擇了合適的控制器,會(huì)將請(qǐng)求發(fā)送給選中的控制器。這些信息被稱為模型。因此無(wú)需在配置類中顯式聲明任何的控制器具體來(lái)講是試圖解析器。 Spring MVC基于模型-視圖-控制器(Model-View-Controller,MVC)模式實(shí)現(xiàn),能夠構(gòu)建像Spring框架那樣靈活和松耦合的Web應(yīng)用程序...

    lindroid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<