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

Springboot Autowried及Resouce使用對比解析

 更新時間:2020年06月10日 11:13:16   作者:KoMiles  
這篇文章主要介紹了Springboot Autowried及Resouce使用對比解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

共同點

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

不同點

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

  @Autowired是spring的注解,是spring2.5版本引入的,Autowired只根據(jù)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();
}

實現(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
 */
@Service
public 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 也能正常訪問。

假如我寫多個實現(xiàn)類會怎么樣呢?

新建一個 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
 */
@Service
public class WomanServiceImpl implements HumanService {

  /**
   * 跑馬拉松
   */
  @Override
  public String runMarathon() {
    return "A Woman run marathon";
  }
}

運行程序,發(fā)現(xiàn)報錯了,因為有兩個實現(xiàn)類,程序不知道找那個了

怎么辦呢?

有兩種辦法

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

例如:在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();
  }
}

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

項目代碼:

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

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

相關文章

  • SpringCloud Gateway鑒權和跨域解決方案

    SpringCloud Gateway鑒權和跨域解決方案

    網(wǎng)關是介于客戶端和服務器端之間的中間層,所有的外部請求都會先經過 網(wǎng)關這一層,也就是說,API 的實現(xiàn)方面更多的考慮業(yè)務邏輯,而安全、性能、監(jiān)控可以交由 網(wǎng)關來做,這樣既提高業(yè)務靈活性又不缺安全性,本文給大家介紹SpringCloud Gateway鑒權和跨域解決方案,一起看看吧
    2023-11-11
  • Java并發(fā)工具類Future使用示例

    Java并發(fā)工具類Future使用示例

    這篇文章主要介紹了Java并發(fā)工具類Future使用示例,本文需要注意future.get()方法是阻塞式的,如果調用該方法的時候任務尚未執(zhí)行完成,則會一直等待下去,直到任務執(zhí)行結束,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-06-06
  • Java本地緩存實現(xiàn)代碼示例

    Java本地緩存實現(xiàn)代碼示例

    這篇文章主要給大家介紹了關于Java本地緩存實現(xiàn)的相關資料,對于緩存的作用不言而喻,可以提高查詢效率,比去DB查詢的速度要快,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-08-08
  • Java連接SqlServer錯誤的完美解決方法

    Java連接SqlServer錯誤的完美解決方法

    我們在做Java或者C#連接數(shù)據(jù)庫的時候,常常遇到連接SqlServer失敗的問題,明明檢查了好幾遍代碼沒問題了,還是連接不上,下面這篇文章主要給大家介紹了關于Java連接SqlServer錯誤的完美解決方法,需要的朋友可以參考下
    2023-04-04
  • idea maven項目無法識別jar包里的class解決方案

    idea maven項目無法識別jar包里的class解決方案

    這篇文章主要介紹了idea maven項目無法識別jar包里的class解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java中的內存溢出方式

    java中的內存溢出方式

    文章介紹了如何使用jmap和IBMHeapAnalyzer等工具分析OutOfMemoryError: Compressedclassspace錯誤,發(fā)現(xiàn)問題出在/org/pf4j/PluginClassLoader加載了大量類
    2024-12-12
  • mybatis查詢語句揭秘之封裝數(shù)據(jù)

    mybatis查詢語句揭秘之封裝數(shù)據(jù)

    這篇文章主要給大家介紹了關于mybatis查詢語句揭秘之封裝數(shù)據(jù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • Java面試高頻問題之RabbitMQ系列全面解析

    Java面試高頻問題之RabbitMQ系列全面解析

    在介紹RabbitMQ之前實現(xiàn)要介紹一下MQ,MQ是什么?MQ全稱是Message Queue,可以理解為消息隊列的意思,簡單來說就是消息以管道的方式進行傳遞。RabbitMQ是一個實現(xiàn)了AMQP(Advanced Message Queuing Protocol)高級消息隊列協(xié)議的消息隊列服務,用Erlang語言的
    2021-11-11
  • java多線程之線程安全的單例模式

    java多線程之線程安全的單例模式

    這篇文章主要為大家詳細介紹了java多線程之線程安全的單例模式,文章內容全面,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 解決Aop @AfterReturning因返回類型不一致導致無法執(zhí)行切面代碼

    解決Aop @AfterReturning因返回類型不一致導致無法執(zhí)行切面代碼

    這篇文章主要介紹了解決Aop @AfterReturning因返回類型不一致導致無法執(zhí)行切面代碼問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

梅河口市| 资溪县| 且末县| 高陵县| 读书| 临漳县| 侯马市| 聊城市| 西安市| 饶平县| 镶黄旗| 石嘴山市| 奉贤区| 仙桃市| 淳化县| 正宁县| 湘乡市| 高雄市| 资中县| 成武县| 盈江县| 内黄县| 舟曲县| 阳高县| 阿克陶县| 长葛市| 手游| 县级市| 普宁市| 永康市| 开封市| 双牌县| 花莲市| 万山特区| 格尔木市| 景洪市| 苗栗市| 姜堰市| 淮南市| 柏乡县| 张家口市|