欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring springMVC中常用注解解析

 更新時(shí)間:2018年05月28日 10:31:33   作者:Mr_LINWH  
這篇文章主要介紹了spring springMVC中常用注解,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

一,使用注解:

    在spring的配置文件applicationContext.xml中,加入注解掃描。配置項(xiàng)就配置了對(duì)指定的包進(jìn)行掃描,以實(shí)現(xiàn)依賴注入。

<?xml version="1.0" encoding="UTF-8"?> 
<span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:aop="http://www.springframework.org/schema/aop"
  xsi:schemaLocation=" 
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
  http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 
  <aop:aspectj-autoproxy/> 
  <context:annotation-config/> 
  <context:component-scan base-package="com.test" /> //去哪掃描
</beans>

二,常見(jiàn)注解:

@Controller
@Service
@Autowired
@RequestMapping
@RequestParam
@ModelAttribute
@Cacheable
@CacheFlush
@Resource
@PostConstruct
@PreDestroy
@Repository
@Component (不推薦使用)
@Scope
@SessionAttributes
@InitBinder
@Required
@Qualifier

三,常用spring注解:

@Controller(運(yùn)用于表現(xiàn)層)

使用@Controller注解標(biāo)識(shí)UserAction之后,就表示要把UserAction交給Spring容器管理,在Spring容器中會(huì)存在一個(gè)名字為"userAction"的action,這個(gè)名字是根據(jù)UserAction類名來(lái)取的。注意:如果@Controller不指定其value【@Controller】,則默認(rèn)的bean名字為這個(gè)類的類名首字母小寫,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,則使用value作為bean的名字。

這里的UserAction還使用了@Scope注解,@Scope("prototype")表示將Action的范圍聲明為原型,可以利用容器的scope="prototype"來(lái)保證每一個(gè)請(qǐng)求有一個(gè)單獨(dú)的Action來(lái)處理,避免struts中Action的線程安全問(wèn)題。spring 默認(rèn)scope是單例模式(scope="singleton"),這樣只會(huì)創(chuàng)建一個(gè)Action對(duì)象,每次訪問(wèn)都是同一Action對(duì)象,數(shù)據(jù)不安全,struts2 是要求每次次訪問(wèn)都對(duì)應(yīng)不同的Action,scope="prototype" 可以保證當(dāng)有請(qǐng)求的時(shí)候都創(chuàng)建一個(gè)Action對(duì)象

@Controller

@Scope("prototype")
public class UserAction extends BaseAction<User>{  
}

@ Service(運(yùn)用于業(yè)務(wù)邏輯層)

注意,@service注解是在服務(wù)接口的實(shí)現(xiàn)類下,而不是接口中使用。

這里很好的體現(xiàn)了spring中的控制反轉(zhuǎn),我們不在讓對(duì)象自己去實(shí)例化對(duì)象,去主動(dòng)依賴對(duì)象,而是 專門用一個(gè)容器來(lái)創(chuàng)建對(duì)象,由IOC進(jìn)行管理。實(shí)例:

Action要使用UserServiceImpl時(shí),就不用主動(dòng)去創(chuàng)建UserServiceImpl的實(shí)例了,創(chuàng)建UserServiceImpl實(shí)例已經(jīng)交給Spring來(lái)做了,Spring把創(chuàng)建好的UserServiceImpl實(shí)例給Action,Action拿到就可以直接用了。Action由原來(lái)的主動(dòng)創(chuàng)建UserServiceImpl實(shí)例后就可以馬上使用,變成了被動(dòng)等待由Spring創(chuàng)建好UserServiceImpl實(shí)例之后再注入給Action,Action才能夠使用。這說(shuō)明Action對(duì)“UserServiceImpl”類的“控制權(quán)”已經(jīng)被“反轉(zhuǎn)”了,原來(lái)主動(dòng)權(quán)在自己手上,自己要使用“UserServiceImpl”類的實(shí)例,自己主動(dòng)去new一個(gè)出來(lái)馬上就可以使用了,但現(xiàn)在自己不能主動(dòng)去new“UserServiceImpl”類的實(shí)例,new“UserServiceImpl”類的實(shí)例的權(quán)力已經(jīng)被Spring拿走了,只有Spring才能夠new“UserServiceImpl”類的實(shí)例,而Action只能等Spring創(chuàng)建好“UserServiceImpl”類的實(shí)例后,再“懇求”Spring把創(chuàng)建好的“UserServiceImpl”類的實(shí)例給他,這樣他才能夠使用“UserServiceImpl”,這就是Spring核心思想“控制反轉(zhuǎn)”,也叫“依賴注入”,“依賴注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是對(duì)UserServiceImpl產(chǎn)生了依賴,Spring把Acion需要依賴的UserServiceImpl注入(也就是“給”)給Action,這就是所謂的“依賴注入”。對(duì)Action而言,Action依賴什么東西,就請(qǐng)求Spring注入給他,對(duì)Spring而言,Action需要什么,Spring就主動(dòng)注入給他。

@Service("userService")
public class UserServiceImpl implements UserService {
}

@ Repository(運(yùn)用于數(shù)據(jù)管理層)

筆者是使用工具反向生成的實(shí)體層數(shù)據(jù)Model跟mapper,所以也沒(méi)用到這個(gè)注解,不過(guò)這個(gè)就是簡(jiǎn)單的向spring容器中注入一個(gè)Bean

@Repository(value="userDao")
public class UserDaoImpl extends BaseDaoImpl<User> {
}

四,常用springMVC注解:

@Autowired(按類型注入)

對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。簡(jiǎn)單來(lái)說(shuō)就是調(diào)用Bean,告訴spring這個(gè)存在與被管理的容器中。

@Autowired 根據(jù)bean 類型從spring 上線文中進(jìn)行查找,注冊(cè)類型必須唯一,否則報(bào)異常

@Autowired 標(biāo)注作用于 Map 類型時(shí),如果 Map 的 key 為 String 類型,則 Spring 會(huì)將容器中所有類型符合 Map 的 value 對(duì)應(yīng)的類型的 Bean 增加進(jìn)來(lái),用 Bean 的 id 或 name 作為 Map 的 key。

@Autowired 還有一個(gè)作用就是,如果將其標(biāo)注在 BeanFactory 類型、ApplicationContext 類型、ResourceLoader 類型、ApplicationEventPublisher 類型、MessageSource 類型上,那么 Spring 會(huì)自動(dòng)注入這些實(shí)現(xiàn)類的實(shí)例,不需要額外的操作。

@Autowired
private IReportService reportService ;
@Resource(按名稱注入)

跟@Autowired類似,@Resource 默認(rèn)按bean的name進(jìn)行查找,如果沒(méi)有找到會(huì)按type進(jìn)行查找

@Resource
private DataSource dataSource; // inject the bean named 'dataSource'
@Resource(name="dataSource")
@Resource(type=DataSource.class)
延伸問(wèn)題:什么是按類型進(jìn)行裝配,什么是按名稱進(jìn)行裝配?

所謂按類型,就是當(dāng)Spring容器中存在一個(gè)與指定屬性類型相同的bean,那么將該屬性進(jìn)行自動(dòng)裝配;如果存在多個(gè)該類型的bean,那么跑出異常,并指出不能使用按類型進(jìn)行自動(dòng)裝配;如果沒(méi)有找到匹配的bean,則什么事都不發(fā)生。
所謂按名稱,即根據(jù)屬性名進(jìn)行自動(dòng)裝配,此項(xiàng)會(huì)檢查Spring容器中與該屬性名完全一致的的bean,進(jìn)行自動(dòng)裝配。

@RequestMapping(映射請(qǐng)求地址)

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

其中有六個(gè)屬性,分別為:

1、 value, method;

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

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

2、consumes,produces

consumes: 指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;

produces:    指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才返回;

3、params,headers

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

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

@Controller
@RequestMapping("/bbtForum.do")
public class BbtForumController {
  @RequestMapping(params = "method=listBoardTopic")
  public String listBoardTopic(int topicId,User user) {}
}
@RequestMapping("/softpg/downSoftPg.do")
@RequestMapping(value="/softpg/ajaxLoadSoftId.do", method=RequestMethod.POST)
@RequestMapping(value="/osu/product/detail.do", params={"modify=false"}, method=RequestMethod.POST)

 @RequestParam(獲取請(qǐng)求參數(shù)的值)

比如我們?cè)跒g覽器的訪問(wèn)地址是:localhost:8080/hello?id=1000,則拿到id的值,例如:

@RestController
public class HelloController {
 
  @RequestMapping(value="/hello",method= RequestMethod.GET)
  public String sayHello(@RequestParam("id") Integer id){
    return "id:"+id;
  }
}

@PathVaribale  (獲取url中的數(shù)據(jù))

@RestController
public class HelloController {
 
  @RequestMapping(value="/hello/{id}",method= RequestMethod.GET)
  public String sayHello(@PathVariable("id") Integer id){
    return "id:"+id;
  }
}

@ResponseBody(返回類型為json)

作用: 該注解用于將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等)使用;

總結(jié)

以上所述是小編給大家介紹的spring springMVC中常用注解解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spring?Boot讀取配置文件內(nèi)容的3種方式(@Value、Environment和@ConfigurationProperties)

    Spring?Boot讀取配置文件內(nèi)容的3種方式(@Value、Environment和@ConfigurationP

    工作中經(jīng)常會(huì)有一些參數(shù)需要配置,同時(shí)在代碼里面需要用到,所有就需要配置類讀取,然后在使用的時(shí)候注入該類進(jìn)行獲取相關(guān)參數(shù),下面這篇文章主要給大家介紹了關(guān)于Spring?Boot讀取配置文件內(nèi)容的3種方式,需要的朋友可以參考下
    2023-01-01
  • java加密算法--MD5加密和哈希散列帶秘鑰加密算法源碼

    java加密算法--MD5加密和哈希散列帶秘鑰加密算法源碼

    這篇文章主要介紹了java加密算法--MD5加密和哈希散列帶秘鑰加密算法源碼的相關(guān)資料,這里附實(shí)例代碼,幫助到大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-11-11
  • 一篇文章教帶你了解Java Spring之自動(dòng)裝配

    一篇文章教帶你了解Java Spring之自動(dòng)裝配

    今天小編就為大家分享一篇關(guān)于Spring中的自動(dòng)裝配,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2021-09-09
  • 使用Spring特性實(shí)現(xiàn)接口多實(shí)現(xiàn)類的動(dòng)態(tài)調(diào)用方式

    使用Spring特性實(shí)現(xiàn)接口多實(shí)現(xiàn)類的動(dòng)態(tài)調(diào)用方式

    這篇文章主要介紹了使用Spring特性實(shí)現(xiàn)接口多實(shí)現(xiàn)類的動(dòng)態(tài)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 解讀Java中Set真的是無(wú)序的嗎

    解讀Java中Set真的是無(wú)序的嗎

    這篇文章主要介紹了Java中Set是不是無(wú)序的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • IDEA下Servlet可能出現(xiàn)404的一些情況

    IDEA下Servlet可能出現(xiàn)404的一些情況

    相信有很多小伙伴遇到報(bào)錯(cuò)都不知道怎么處理,今天特地整理了這篇文章,文中對(duì)IDEA下Servlet可能出現(xiàn)404的一些情況作了詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Java 判斷IP地址的合法性實(shí)例詳解

    Java 判斷IP地址的合法性實(shí)例詳解

    這篇文章主要介紹了Java 判斷IP地址的合法性實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Springboot深入講解nocos的整合與使用

    Springboot深入講解nocos的整合與使用

    Nacos?是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái),在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們經(jīng)常使用nacos作為配置中心和注冊(cè)中心。本文章我們就從代碼層面研究下springboot是如何整合nacos使用的
    2022-07-07
  • hadoop運(yùn)行java程序(jar包)并運(yùn)行時(shí)動(dòng)態(tài)指定參數(shù)

    hadoop運(yùn)行java程序(jar包)并運(yùn)行時(shí)動(dòng)態(tài)指定參數(shù)

    這篇文章主要介紹了hadoop如何運(yùn)行java程序(jar包)并運(yùn)行時(shí)動(dòng)態(tài)指定參數(shù),使用hadoop 運(yùn)行 java jar包,Main函數(shù)一定要加上全限定類名,需要的朋友可以參考下
    2021-06-06
  • java數(shù)據(jù)類型和運(yùn)算符的深入講解

    java數(shù)據(jù)類型和運(yùn)算符的深入講解

    這篇文章主要給大家介紹了關(guān)于java數(shù)據(jù)類型和運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論