最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)依賴(lài)注入。

<?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)名來(lái)取的。注意:如果@Controller不指定其value【@Controller】,則默認(rèn)的bean名字為這個(gè)類(lèi)的類(lèi)名首字母小寫(xiě),如果指定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)類(lèi)下,而不是接口中使用。

這里很好的體現(xiàn)了spring中的控制反轉(zhuǎn),我們不在讓對(duì)象自己去實(shí)例化對(duì)象,去主動(dòng)依賴(lài)對(duì)象,而是 專(zhuān)門(mén)用一個(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”類(lèi)的“控制權(quán)”已經(jīng)被“反轉(zhuǎn)”了,原來(lái)主動(dòng)權(quán)在自己手上,自己要使用“UserServiceImpl”類(lèi)的實(shí)例,自己主動(dòng)去new一個(gè)出來(lái)馬上就可以使用了,但現(xiàn)在自己不能主動(dòng)去new“UserServiceImpl”類(lèi)的實(shí)例,new“UserServiceImpl”類(lèi)的實(shí)例的權(quán)力已經(jīng)被Spring拿走了,只有Spring才能夠new“UserServiceImpl”類(lèi)的實(shí)例,而Action只能等Spring創(chuàng)建好“UserServiceImpl”類(lèi)的實(shí)例后,再“懇求”Spring把創(chuàng)建好的“UserServiceImpl”類(lèi)的實(shí)例給他,這樣他才能夠使用“UserServiceImpl”,這就是Spring核心思想“控制反轉(zhuǎn)”,也叫“依賴(lài)注入”,“依賴(lài)注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是對(duì)UserServiceImpl產(chǎn)生了依賴(lài),Spring把Acion需要依賴(lài)的UserServiceImpl注入(也就是“給”)給Action,這就是所謂的“依賴(lài)注入”。對(duì)Action而言,Action依賴(lài)什么東西,就請(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(按類(lèi)型注入)

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

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

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

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

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

跟@Autowired類(lèi)似,@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)題:什么是按類(lèi)型進(jìn)行裝配,什么是按名稱(chēng)進(jìn)行裝配?

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

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

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

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

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)求。

@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(返回類(lèi)型為json)

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

總結(jié)

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

相關(guān)文章

  • IntelliJ IDEA 詳細(xì)圖解最常用的配置(適合剛剛用的新人)

    IntelliJ IDEA 詳細(xì)圖解最常用的配置(適合剛剛用的新人)

    這篇文章主要介紹了IntelliJ IDEA 詳細(xì)圖解最常用的配置,本篇教程非常適合剛剛用的新人,本文圖文并茂給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

    Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系

    這篇文章主要介紹了Java servlet、filter、listener、interceptor之間的區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • spring cloud 使用Eureka 進(jìn)行服務(wù)治理方法

    spring cloud 使用Eureka 進(jìn)行服務(wù)治理方法

    這篇文章主要介紹了spring cloud 使用Eureka 進(jìn)行服務(wù)治理方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法

    Feign Client超時(shí)時(shí)間設(shè)置不生效的解決方法

    這篇文章主要為大家詳細(xì)介紹了Feign Client 超時(shí)時(shí)間設(shè)置不生效的原因與解決方法,具有一定的的參考價(jià)值,希望對(duì)大家有一定的幫助
    2025-04-04
  • SpringBoot打印系統(tǒng)執(zhí)行的sql語(yǔ)句及日志配置指南

    SpringBoot打印系統(tǒng)執(zhí)行的sql語(yǔ)句及日志配置指南

    這篇文章主要給大家介紹了關(guān)于SpringBoot打印系統(tǒng)執(zhí)行的sql語(yǔ)句及日志配置的相關(guān)資料,在Java SpringBoot項(xiàng)目中如果使用了Mybatis框架,默認(rèn)情況下執(zhí)行的所有SQL操作都不會(huì)打印日志,需要的朋友可以參考下
    2023-10-10
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實(shí)例形式分析了spring boot注解方式使用redis緩存相關(guān)的依賴(lài)庫(kù)引入、注解使用及redis緩存相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    本文主要介紹了SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 通俗易懂學(xué)習(xí)java并發(fā)工具類(lèi)-Semaphore,Exchanger

    通俗易懂學(xué)習(xí)java并發(fā)工具類(lèi)-Semaphore,Exchanger

    這篇文章主要介紹了java并發(fā)工具類(lèi)-Semaphore,Exchanger,java并發(fā)工具類(lèi)有很多,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編帶大家來(lái)一起學(xué)習(xí)一下吧
    2019-06-06
  • Solr通過(guò)特殊字符分詞實(shí)現(xiàn)自定義分詞器詳解

    Solr通過(guò)特殊字符分詞實(shí)現(xiàn)自定義分詞器詳解

    最近因?yàn)楣ぷ鞯男枰?,要做一個(gè)分詞器,通過(guò)查找相關(guān)的資料最終用solr實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于Solr通過(guò)特殊字符分詞實(shí)現(xiàn)自定義分詞器的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起看看吧。
    2017-09-09
  • Java FileWriter輸出換行操作

    Java FileWriter輸出換行操作

    這篇文章主要介紹了Java FileWriter輸出換行操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

长武县| 池州市| 江川县| 凉山| 义乌市| 荔波县| 武定县| 区。| 陵川县| 都安| 呼伦贝尔市| 合肥市| 高碑店市| 拜城县| 犍为县| 泗水县| 聂拉木县| 宜兰县| 巴塘县| 虎林市| 博湖县| 蓝田县| 明光市| 盈江县| 临西县| 宣武区| 灌南县| 合川市| 苏尼特左旗| 元朗区| 安阳县| 山东省| 冀州市| 宁城县| 旬邑县| 拉萨市| 淄博市| 陆良县| 寿阳县| 木里| 酉阳|