欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中@Autowired和@Resource注解的使用區(qū)別詳解

 更新時間:2023年11月06日 08:43:50   作者:Sterne_  
這篇文章主要介紹了Spring中@Autowired和@Resource注解的使用區(qū)別詳解,@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類型兼容的?Bean?并進(jìn)行注入,如果無法通過type匹配到對應(yīng)的?Bean?的話,會根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常,需要的朋友可以參考下

1. @Autowired

@Autowired是由Spring提供的注解

@Autowired的bean的匹配規(guī)則

@Autowired默認(rèn)根據(jù)type進(jìn)行注入,找到與指定類型兼容的 Bean 并進(jìn)行注入,如果無法通過type匹配到對應(yīng)的 Bean 的話,會根據(jù)name進(jìn)行匹配,如果都匹配不到則拋出異常。

  • @Autowired 默認(rèn)是按照類的類型去匹配。如果存在一個相同類型的bean,則注入該bean。
  • 如果存在多個 bean,但只有一個 bean 擁有 @Primary 注解,則將帶有 @Primary 注解的 bean 注入。@Primary 注解用于指定默認(rèn)首選的 bean。
  • 如果存在多個 bean,可以使用@Qualifier注解,配合該注解指定bean的具體名稱,根據(jù)名稱去識別bean。
  • 如果存在多個 bean,可以使用 List 或 Set 數(shù)據(jù)結(jié)構(gòu)來接收所有匹配的 bean。Spring 將自動將所有匹配的 bean 放入這些集合中。
  • 如果存在多個 bean,沒有配合上述的方案,則將拋出 NoUniqueBeanDefinitionException 異常。

在這里插入圖片描述

@Autowired的required屬性

默認(rèn)情況下,required = true,即依賴bean必須存在,如果不存在,則會拋出異常。但是,通過將required屬性設(shè)置為false,則依賴bean不存在也不會報錯。

在這里插入圖片描述

2. @Resource

@Resource是Java EE規(guī)范的一部分,但Spring同樣支持該注解。

@Resource的bean的匹配規(guī)則

默認(rèn)根據(jù)name進(jìn)行注入,如果無法通過名稱匹配到對應(yīng)的 Bean 的話,會根據(jù)type進(jìn)行匹配,找到與指定類型兼容的 Bean 并進(jìn)行注入,如果都匹配不到則拋出異常。

使用 name 屬性指定資源的名稱

@Component
public class MyClass {
    // 名為 "myBean1" 的 bean 將會被注入
    @Resource(name = "myBean1")
    private MyBean myBean;
}

使用默認(rèn)名稱匹配資源

@Component
public class MyClass {
    // 名為“mybean”的bean將被注入
    @Resource
    private MyBean myBean;
}

根據(jù)type 屬性來指定要注入的bean類型

public interface MyService {
    void fetchData();
}
@Component
public class MyServiceA implements MyService {
    public void fetchData() {
        System.out.println("from MyServiceA");
    }
}
@Component
public class MyServiceB implements MyService {
    public void fetchData() {
        System.out.println("from MyServiceB");
    }
}
@Component
public class DataProcessor {
    // 根據(jù)指定type注入myServiceA的bean
    @Resource(type = MyServiceA.class)
    private MyService myService;
    // 與上面效果相同注入myServiceA的bean
    @Resource
    private MyServiceA myServiceA;
    // 與上面效果相同注入myServiceA的bean
    @Resource
    private MyService myServiceA;
    // 與上面效果相同注入myServiceA的bean
    @Resource(name = "myServiceA")
    private MyService myService;
    // 注入bean失敗,存在兩個bean
    @Resource
    private MyService myService;
}

@Resource不存在required屬性

到此這篇關(guān)于Spring中@Autowired和@Resource注解的使用區(qū)別詳解的文章就介紹到這了,更多相關(guān)@Autowired和@Resource注解區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論