亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Springboot Autowried及Resouce使用對比解析

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

在做項目時,發現項目中 加載類時,有的地方使用@Autowired,有的地方使用@Resource

在網上搜集了資料

共同點

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

不同點

@Resource是Java自己的注解,@Resource有兩個屬性是比較重要的,分是name和type;Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型。所以如果使用name屬性,則使用byName的自動注入策略,而使用type屬性時則使用byType自動注入策略。如果既不指定name也不指定type屬性,這時將通過反射機制使用byName自動注入策略。

@Autowired是spring的注解,是spring2.5版本引入的,Autowired只根據type進行注入,不會去匹配name。如果涉及到type無法辨別注入對象時,那需要依賴@Qualifier或@Primary注解一起來修飾。

寫列子

新建 HumanService.java類

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

實現類 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(); }}

運行程序

輸出內容為: man run marathon

把controller里的 @Autowired 改成@Resource 也能正常訪問。

假如我寫多個實現類會怎么樣呢?

新建一個 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'; }}

運行程序,發現報錯了,因為有兩個實現類,程序不知道找那個了

怎么辦呢?

有兩種辦法

第一種,在實現類中給類起名字,在引入的時候直接引入名字。

例如:在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類中使用時,也需要制定一下名字。

如果使用@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(); }}

如果想優先引用某一個類,可以在實現類上使用 @Primary。

項目代碼:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
主站蜘蛛池模板: 毛片视频免费网站 | 五月婷婷色视频 | 精品一区二区在线观看 | yy4080一级毛片免费观看 | 亚洲婷婷天堂在线综合 | 亚洲欧美日韩综合在线一区二区三区 | 欧美日一区 | 亚洲人成一区二区三区 | 免费黄色看片网站 | 亚洲 欧美 91 | 日日综合网 | 韩国一级毛片视频免费观看 | 黄色片网站在线免费观看 | 用力插视频 | 丝袜美腿在线观看 | 免费中文字幕乱码电影麻豆网 | 奇米网狠狠干 | 欧美黄色大片视频 | a毛片免费观看 | 国产成人精品视频频 | 国产成人高清精品免费5388 | 日韩视频亚洲 | 国亚洲欧美日韩精品 | 亚洲国产第一区二区香蕉 | 日韩精品在线一区 | 91资源在线视频 | 国内精品久久影视免费 | 久草99 | 亚洲欧美中文日韩在线v日本 | 黄网站在线观看永久免费 | 欧美亚洲欧美日韩中文二区 | 另类免费视频 | 国产精品嫩草影院视频 | 亚洲精品无线乱码一区 | 久久精品国产清自在天天线 | 国产女乱淫真高清免费视频 | 免费视频精品一区二区三区 | 成人毛片免费视频播放 | 精品欧美高清一区二区免费 | 日韩国产免费一区二区三区 | 亚洲日韩中文字幕天堂不卡 |