午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Springboot Autowried及Resouce使用對(duì)比解析

瀏覽:10日期:2023-05-13 08:26:27

在做項(xiàng)目時(shí),發(fā)現(xiàn)項(xiàng)目中 加載類時(shí),有的地方使用@Autowired,有的地方使用@Resource

在網(wǎng)上搜集了資料

共同點(diǎn)

@Resource和@Autowired都可以作為注入屬性的修飾,在接口僅有單一實(shí)現(xiàn)類時(shí),兩個(gè)注解的修飾效果相同,可以互相替換,不影響使用。

不同點(diǎn)

@Resource是Java自己的注解,@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)注入策略。

@Autowired是spring的注解,是spring2.5版本引入的,Autowired只根據(jù)type進(jìn)行注入,不會(huì)去匹配name。如果涉及到type無(wú)法辨別注入對(duì)象時(shí),那需要依賴@Qualifier或@Primary注解一起來(lái)修飾。

寫(xiě)列子

新建 HumanService.java類

package com.komiles.study.service;/** * @author komiles@163.com * @date 2020-03-23 11:46 */public interface HumanService { /** * 跑馬拉松 * @return */ String runMarathon();}

實(shí)現(xiàn)類 ManServiceImpl.java

package com.komiles.study.service.impl;import com.komiles.study.service.HumanService;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;/** * @author komiles@163.com * @date 2020-03-23 11:48 */@Servicepublic class ManServiceImpl implements HumanService { /** * 跑馬拉松 */ @Override public String runMarathon() { return ' A man run marathon'; }}

新建HumanController.java

package com.komiles.study.controller;import com.komiles.study.service.HumanService;import com.komiles.study.service.impl.ManServiceImpl;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author komiles@163.com * @date 2020-03-23 11:49 */@RestController@RequestMapping('/human')public class HumanController { @Autowired private HumanService humanService; @GetMapping('/run') public String runMarathon() { return humanService.runMarathon(); }}

運(yùn)行程序

輸出內(nèi)容為: man run marathon

把controller里的 @Autowired 改成@Resource 也能正常訪問(wèn)。

假如我寫(xiě)多個(gè)實(shí)現(xiàn)類會(huì)怎么樣呢?

新建一個(gè) WomanServiceImpl.java

package com.komiles.study.service.impl;import com.komiles.study.service.HumanService;import org.springframework.context.annotation.Primary;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;/** * @author komiles@163.com * @date 2020-03-23 12:01 */@Servicepublic class WomanServiceImpl implements HumanService { /** * 跑馬拉松 */ @Override public String runMarathon() { return 'A Woman run marathon'; }}

運(yùn)行程序,發(fā)現(xiàn)報(bào)錯(cuò)了,因?yàn)橛袃蓚€(gè)實(shí)現(xiàn)類,程序不知道找那個(gè)了

怎么辦呢?

有兩種辦法

第一種,在實(shí)現(xiàn)類中給類起名字,在引入的時(shí)候直接引入名字。

例如:在ManServiceImpl.java類,@Service上加值。@Service(value = 'manService') 或者 @Component(value = 'manService')

package com.komiles.study.service.impl;import com.komiles.study.service.HumanService;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;/** * @author komiles@163.com * @date 2020-03-23 11:48 */@Service(value = 'manService')//@Component(value = 'manService')public class ManServiceImpl implements HumanService { /** * 跑馬拉松 */ @Override public String runMarathon() { return ' A man run marathon'; }}

在Controller類中使用時(shí),也需要制定一下名字。

如果使用@Resource 需要加上 @Resource(name='manService')

如果使用@Autowired 需要使用@Qualifier(value='manService')

package com.komiles.study.controller;import com.komiles.study.service.HumanService;import com.komiles.study.service.impl.ManServiceImpl;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;/** * @author komiles@163.com * @date 2020-03-23 11:49 */@RestController@RequestMapping('/human')public class HumanController { @Autowired @Qualifier(value = 'manService')// @Resource(name='manService') private HumanService humanService; @GetMapping('/run') public String runMarathon() { return humanService.runMarathon(); }}

如果想優(yōu)先引用某一個(gè)類,可以在實(shí)現(xiàn)類上使用 @Primary。

項(xiàng)目代碼:

https://github.com/KoMiles/springboot/blob/master/src/main/java/com/komiles/study/controller/HumanController.java

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 一级片a级片 | 欧美日韩一级在线 | 欧美a级成人淫片免费看 | 亚洲图片综合网 | 国产在线视频不卡 | 久久高清免费视频 | 蜜桃成人在线观看 | 欧美成人免费观看视频 | 亚洲一区二区三区四区视频 | 在线视频 一区二区 | 亚洲精品综合在线 | 久久精品一二 | 羞羞免费视频 | 亚洲欧美日韩另类 | 一区二区视频在线 | 99在线观看精品视频 | 亚洲成a人片 | 人人玩人人干 | 91大神在线资源观看无广告 | 一本色道综合久久欧美日韩精品 | 日韩在线免费视频 | 免费看的黄色 | 99在线精品视频免费观看20 | 91在线公开视频 | 欧美久久久久久久久久久 | 男人天堂网在线视频 | 久久国产欧美 | 中国国产毛片 | 高清成人综合 | 中文字幕一二三四 | 久久久久综合网 | 国产中文av在线 | 日韩色网 | 国产最新av | 最近日本中文字幕 | 91成人福利视频 | 激情视频久久 | 亚洲日本中文字幕在线 | 精品国产第一页 | 在线视频午夜 | 欧美黑粗硬 |