@Resource、@Autowired、@Qualifier的註解注入及區別

1、前言spring

  spring4.0+版本開發中使用到了自動裝配技術,故有了這篇總結博文,後面對接口、實現類、裝配注入,作詳細解釋。ide

 

2、@Resource、@Autowired、@Qualifier 定義說明:測試

  一、@Resource 默認根據名字注入,其次按照類型搜索spa

  二、@Autowired 根據類型注入code

  三、@Autowired @Qualifie("userService") 兩個結合起來能夠根據名字和類型注入blog

 

3、程序示例接口

一、定義接口 GameService遊戲

package com.tlong.service;

/**
 * 遊戲接口
 */
public interface GameService {
    public void play();
}

二、定義兩個實現類 GloryOfKingsImpl 、PubgImpl 開發

package com.tlong.service;

import org.springframework.stereotype.Service;

/**
 * 王者榮耀
 */
@Component
public class GloryOfKingsImpl implements GameService {

    @Override
    public void play() {
        System.out.println("王者榮耀 遊戲開始......");
    }
}
package com.tlong.service;

import org.springframework.stereotype.Service;

/**
 * 絕地求生
 */
@Component
public class PubgImpl implements GameService {
    @Override
    public void play() {
        System.out.println("絕地求生 遊戲開始......");
    }
}

三、定義測試類 TestControllerclass

public class TestController {

    //簡潔寫法:保證變量名是實現類的名稱,注意:首字符小寫
    @Autowired
    private GameService gloryOfKingsImpl;

    //簡潔寫法:保證變量名是實現類的名稱,注意:首字符小寫,此處@Resource和@Autowired實現方式相同
    @Resource
    private GameService pubgImpl;



    //若是想指定不同的變量名要怎麼寫呢?不能使用上面的自動裝配技術也能夠理解,在實現類中使用了@Component註解,spring會自爲其建立一個bean並給定ID爲gloryOfKingsImpl,spring並不知道該變量須要裝配哪一個實現類
    //寫法以下
    //一、使用@Autowired和@Qualifier實現,注意:@Qualifier中的首字符小寫
    @Autowired
    @Qualifier("gloryOfKingsImpl")
    private GameService wzry;

    //二、使用@Resource實現,注意:@Resource中的首字符小寫
    @Resource(name = "pubgImpl")
    private GameService jdqs;

    public void playGame(){
        gloryOfKingsImpl.play();
        pubgImpl.play();
        wzry.play();
        jdqs.play();
    }
}
相關文章
相關標籤/搜索