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

詳解Spring @Autowired 注入小技巧

 更新時(shí)間:2018年07月24日 09:47:16   作者:擁抱心中的夢(mèng)想  
這篇文章主要介紹了詳解Spring @Autowired 注入小技巧,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

今天和同事討論到Spring自動(dòng)注入時(shí),發(fā)現(xiàn)有這么一段代碼特別地困惑,當(dāng)然大致的原理還是可以理解的,只不過(guò)以前從來(lái)沒有這么用過(guò)。想到未來(lái)可能會(huì)用到,或者未來(lái)看別人寫的代碼時(shí)不至于花時(shí)間解決同樣的困惑,所以小編還是覺得有必要研究記錄一下。

一、同一類型注入多次為同一實(shí)例

首先讓我們先看下這段代碼是什么?

@Autowired
private XiaoMing xiaoming;

@Autowired
private XiaoMing wanger;

XiaoMing.java

package com.example.demo.beans.impl;

import org.springframework.stereotype.Service;

/**
 * 
 * The class XiaoMing.
 *
 * Description:小明
 *
 * @author: huangjiawei
 * @since: 2018年7月23日
 * @version: $Revision$ $Date$ $LastChangedBy$
 *
 */
@Service
public class XiaoMing {
 
 public void printName() {
  System.err.println("小明");
 }
}

我們都知道 @Autowired 可以根據(jù)類型( Type )進(jìn)行自動(dòng)注入,并且默認(rèn)注入的bean為單例( SingleTon )的,那么我們可能會(huì)問,上面注入兩次不會(huì)重復(fù)嗎?答案是肯定的。而且每次注入的實(shí)例都是同一個(gè)實(shí)例。下面我們簡(jiǎn)單驗(yàn)證下:

@RestController
public class MyController {
 
 @Autowired
 private XiaoMing xiaoming;
 
 @Autowired
 private XiaoMing wanger;
 
 @RequestMapping(value = "/test.json", method = RequestMethod.GET)
 public String test() {
  System.err.println(xiaoming);
  System.err.println(wanger);
  return "hello";
 }
}

調(diào)用上面的接口之后,將輸出下面內(nèi)容,可以看出兩者為同一實(shí)例。

com.example.demo.beans.impl.XiaoMing@6afd4ce9
com.example.demo.beans.impl.XiaoMing@6afd4ce9

二、注入接口類型實(shí)例

如果我們要注入的類型聲明為一個(gè)接口類型,而且該接口有1個(gè)以上的實(shí)現(xiàn)類,那么下面這段代碼還能夠正常運(yùn)行嗎?我們假設(shè) Student 為接口, WangEr XiaoMing 為兩個(gè)實(shí)現(xiàn)類。

@Autowired
private Student stu1;

@Autowired
private Student stu2;
@Service
public class XiaoMing implements Student {
@Service
public class WangEr implements Student {

答案是上面的代碼不能正常運(yùn)行,而且Spring 還啟動(dòng)報(bào)錯(cuò)了,原因是Spring想為 Student 注入一個(gè)單例的實(shí)例,但在注入的過(guò)程中意外地發(fā)現(xiàn)兩個(gè),所以報(bào)錯(cuò),具體錯(cuò)誤信息如下:

Field stu1 in com.example.demo.controller.MyController required a single bean, but 2 were found:
 - wangEr: defined in file [C:\Users\huangjiawei\Desktop\demo\target\classes\com\example\demo\beans\impl\WangEr.class]
 - xiaoMing: defined in file [C:\Users\huangjiawei\Desktop\demo\target\classes\com\example\demo\beans\impl\XiaoMing.class]

那該怎么弄才行呢?一般思路我們會(huì)想到為每個(gè)實(shí)現(xiàn)類分配一個(gè)id值,結(jié)果就有了下面的代碼:

@Autowired
private Student stu1;

@Autowired
private Student stu2;
@Service("stu1")
public class XiaoMing implements Student {
@Service("stu2")
public class WangEr implements Student {

做完上面的配置之后,Spring就會(huì)根據(jù)字段名稱默認(rèn)去bean工廠找相應(yīng)的bean進(jìn)行注入,注意名稱不能夠隨便取的,要和注入的屬性名一致。

三、總結(jié)

  1. 1、同一類型可以使用@Autowired注入多次,并且所有注入的實(shí)例都是同一個(gè)實(shí)例;
  2. 2、當(dāng)對(duì)接口進(jìn)行注入時(shí),應(yīng)該為每個(gè)實(shí)現(xiàn)類指明相應(yīng)的id,則Spring將報(bào)錯(cuò);

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

相關(guān)文章

  • Java在運(yùn)行時(shí)識(shí)別類型信息的方法詳解

    Java在運(yùn)行時(shí)識(shí)別類型信息的方法詳解

    這篇文章主要給大家介紹了關(guān)于Java在運(yùn)行時(shí)識(shí)別類型信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2019-01-01
  • 如何使用IntelliJ IDEA搭建MyBatis-Plus框架并連接MySQL數(shù)據(jù)庫(kù)

    如何使用IntelliJ IDEA搭建MyBatis-Plus框架并連接MySQL數(shù)據(jù)庫(kù)

    這篇文章主要介紹了如何使用IntelliJ IDEA搭建MyBatis-Plus框架并連接MySQL數(shù)據(jù)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • java二叉樹的非遞歸遍歷

    java二叉樹的非遞歸遍歷

    二叉樹的遞歸遍歷比較簡(jiǎn)單,這里就不聊了,今天主要聊聊二叉樹的非遞歸遍歷,主要借助于“?!焙筮M(jìn)先出的特性來(lái)保存節(jié)點(diǎn)的順序,先序遍歷和中序遍歷相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,重點(diǎn)理解后序遍歷
    2020-12-12
  • 解決mybatis三表連接查詢數(shù)據(jù)重復(fù)的問題

    解決mybatis三表連接查詢數(shù)據(jù)重復(fù)的問題

    這篇文章主要介紹了解決mybatis三表連接查詢數(shù)據(jù)重復(fù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • htmlcleaner使用方法及xpath語(yǔ)法初探

    htmlcleaner使用方法及xpath語(yǔ)法初探

    HtmlCleaner是一個(gè)開源的Java語(yǔ)言的Html文檔解析器。HtmlCleaner能夠重新整理HTML文檔的每個(gè)元素并生成結(jié)構(gòu)良好(Well-Formed)的 HTML 文檔
    2015-08-08
  • idea2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟

    idea2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟

    這篇文章主要介紹了idea 2020.1.3 手把手教你創(chuàng)建web項(xiàng)目的方法步驟,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Springboot+mybatis-plus+注解實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離

    Springboot+mybatis-plus+注解實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離

    本文將結(jié)合實(shí)例代碼,介紹Springboot+mybatis-plus+注解實(shí)現(xiàn)數(shù)據(jù)權(quán)限隔離,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Java使用poi生成word文檔的簡(jiǎn)單實(shí)例

    Java使用poi生成word文檔的簡(jiǎn)單實(shí)例

    Java POI是一個(gè)用于處理Microsoft Office文件(如Word、Excel和PowerPoint)的API,它是一個(gè)開源庫(kù),允許Java開發(fā)者讀取、創(chuàng)建和修改這些文檔,本文給大集介紹了Java使用poi生成word文檔的簡(jiǎn)單實(shí)例,感興趣的朋友可以參考下
    2024-06-06
  • java如何將map數(shù)據(jù)存入到實(shí)體類對(duì)象中

    java如何將map數(shù)據(jù)存入到實(shí)體類對(duì)象中

    在Java編程中,經(jīng)常需要將Map集合中的數(shù)據(jù)轉(zhuǎn)換為實(shí)體類對(duì)象,這可以通過(guò)反射機(jī)制實(shí)現(xiàn),即通過(guò)遍歷Map對(duì)象,使用反射根據(jù)鍵名對(duì)應(yīng)實(shí)體類的屬性名,動(dòng)態(tài)調(diào)用setter方法將值設(shè)置到實(shí)體對(duì)象中,這樣的操作使得數(shù)據(jù)從Map結(jié)構(gòu)轉(zhuǎn)移到了具體的JavaBean中,便于后續(xù)的操作和管理
    2024-09-09
  • Java實(shí)現(xiàn)壓縮圖片大小

    Java實(shí)現(xiàn)壓縮圖片大小

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)壓縮圖片大小,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論

融水| 庄河市| 阳西县| 溧水县| 荥阳市| 石楼县| 盐津县| 鱼台县| 普格县| 卢龙县| 新化县| 卓尼县| 平度市| 德江县| 霍山县| 扶沟县| 桃园县| 洛阳市| 虞城县| 白朗县| 安康市| 昌黎县| 象山县| 上杭县| 蒙自县| 长顺县| 宝鸡市| 泗水县| 湟源县| 双辽市| 泸定县| 蛟河市| 广州市| 龙井市| 北宁市| 蓬安县| 珠海市| 政和县| 大港区| 罗平县| 永德县|