spring注入注解@Resource和@Autowired


一、@Autowired和@Qualifier

@Autowired是自動注入的注解,寫在屬性、方法、構造方法上,會按照類型自動裝配屬性或參數。該注解,可以自動裝配接口的實現類,但前提是spring容器中只有一個實現類的bean,多個bean會報錯。同樣,自動裝配其他類型時也一樣。

但同樣的類型的bean有多個實例或同樣的接口有多個實現類的bean,可以使用@Qualifier指定bean名稱,指定bean名稱后,就會按照bean的名稱匹配。

  • 寫在屬性上,會自動注入bean到屬性里。
  • 寫在方法或構造方法上,會將自動注入bean到參數里。

另外,@AutoWired無法對String、int等常量數據注入。

裝配規則:

  當添加@Qualifier時,按照bean的名稱匹配。

  當只寫@Autowired時,按照類型自動裝配,若同時有多個或一個都不滿足,會報錯。

1、寫在屬性上

@Autowired默認按照類型注入,匹配屬性類型,也可使用@Qualifier指定bean名稱,使用bean名稱裝配。

    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;

 2、寫在方法上

 

@Component("testSon")
public class Son {
    int num = 99;
}
    

    

    @Autowired
    public Father(@Qualifier("testSon") Son son) {
        this.son = son;
    }

 

二、@Resource

@Resource並非spring中的注解,而是tomcat內的javax.annotation包下的注解。

該注解可以寫在屬性上或方法上,實現自動注入。不能寫在構造方法上。

裝配規則:

  當只寫注解,默認按屬性名查找beanid,查到則直接裝配,若spring容器中沒有該beanid,則繼續安裝屬性類型匹配,若只有一個匹配,則裝配;若同時滿足多個則報錯。

  當使用了name參數,則只按照name值匹配beanid,沒有滿足條件,會報錯。

1、@Resource默認安照屬性名注入,可使用name和type屬性指定bean名稱和類型

@Resource(name="testSon")
Son son;

 2、寫在set方法上

    @Resource(name="testSon")
    public void setSon(Son son) {
        this.son = son;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM