SpringMVC常用的注解有哪些

SpringMVC 常用注解

創(chuàng)新互聯(lián)建站是一家專(zhuān)注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、重慶小程序開(kāi)發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開(kāi)發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立10余年以來(lái),已經(jīng)為超過(guò)千家成都崗?fù)?/a>各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的超過(guò)千家客戶(hù)與我們一路同行,見(jiàn)證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。

1、@Controller

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

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

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

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

<!--方式一-->
<bean class="com.host.app.web.controller.MyController"/>
<!--方式二-->
< context:component-scan base-package = "com.host.app.web" />//路徑寫(xiě)到controller的上一層(掃描包詳解見(jiàn)下面淺析)

2、@RequestMapping

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

RequestMapping注解有六個(gè)屬性,下面我們把她分成三類(lèi)進(jìn)行說(shuō)明(下面有相應(yīng)示例)。

1、 value, method;

value:     指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template 模式(后面將會(huì)說(shuō)明);

method:  指定請(qǐng)求的method類(lèi)型, GET、POST、PUT、DELETE等;

2、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)型才返回;

3、params,headers

params: 指定request中必須包含某些參數(shù)值是,才讓該方法處理。

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

3、@Resource和@Autowired

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

1、共同點(diǎn)

兩者都可以寫(xiě)在字段和setter方法上。兩者如果都寫(xiě)在字段上,那么就不需要再寫(xiě)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注解是按照類(lèi)型(byType)裝配依賴(lài)對(duì)象,默認(rèn)情況下它要求依賴(lài)對(duì)象必須存在,如果允許null值,可以設(shè)置它的required屬性為false。如果我們想使用按照名稱(chēng)(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的類(lèi)型。所以,如果使用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,則從上下文中查找名稱(chēng)(id)匹配的bean進(jìn)行裝配,找不到則拋出異常。

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

④如果既沒(méi)有指定name,又沒(méi)有指定type,則自動(dòng)按照byName方式進(jìn)行裝配;如果沒(méi)有匹配,則回退為一個(gè)原始類(lèi)型進(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作用域中,寫(xiě)在class上面。

具體示例參見(jiàn)下面:使用 @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ù),類(lèi)似一種是request.getParameter("name"),它有三個(gè)常用參數(shù):defaultValue = "0", required = false, value = "isApp";defaultValue 表示設(shè)置默認(rèn)值,required 銅過(guò)boolean設(shè)置是否是必須要傳入的參數(shù),value 值表示接受的傳入的參數(shù)類(lèi)型。

7、@ResponseBody

作用: 該注解用于將Controller的方法返回的對(duì)象,通過(guò)適當(dāng)?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫(xiě)入到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)不知道一些類(lèi)歸到哪個(gè)層時(shí)使用,但是不建議。

9、@Repository

用于注解dao層,在daoImpl類(lèi)上面注解。

以上就是SpringMVC 常用注解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

分享標(biāo)題:SpringMVC常用的注解有哪些
網(wǎng)頁(yè)URL:http://muchs.cn/article10/johgdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄自適應(yīng)網(wǎng)站、Google、品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名