淺談SpringBoot @Autowired的兩種注入方式
Autowired有兩種注入方式
- by type
- by name
默認使用的是byType的方式向Bean里面注入相應(yīng)的Bean。例如:
@Autowired private UserService userService;
這段代碼會在初始化的時候,在spring容器中尋找一個類型為UserService的bean實體注入,關(guān)聯(lián)到userService的引入上。
但是如果UserService這個接口存在多個實現(xiàn)類的時候,就會在spring注入的時候報錯,例如:
public class UserService1 implements UserService public class UserService2 implements UserService
此時會報錯 org.springframework.beans.factory.BeanCreationException,而原因是注入的時候發(fā)現(xiàn)有2個匹配的bean,但是不知道要注入哪一個:expected single matching bean but found 2: userService1,userService2
我們改成以下方式:
@Autowired
private UserService userService1;
@Autowired
private UserService userService2;
@Autowired
@Qualifier(value = "userService2")
private UserService userService3;
@Test
public void test(){
System.out.println(userService1.getClass().toString());
System.out.println(userService2.getClass().toString());
System.out.println(userService3.getClass().toString());
}
運行結(jié)果:
class yjc.demo.serviceImpl.UserService1
class yjc.demo.serviceImpl.UserService2
class yjc.demo.serviceImpl.UserService2
運行結(jié)果成功,說明了2種處理多個實現(xiàn)類的方法:
1.變量名用userService1,userService2,而不是userService。
通常情況下@Autowired是通過byType的方法注入的,可是在多個實現(xiàn)類的時候,byType的方式不再是唯一,而需要通過byName的方式來注入,而這個name默認就是根據(jù)變量名來的。
2.通過@Qualifier注解來指明使用哪一個實現(xiàn)類,實際上也是通過byName的方式實現(xiàn)。
由此看來,@Autowired注解到底使用byType還是byName,其實是存在一定策略的,也就是有優(yōu)先級。優(yōu)先用byType,而后是byName。
到此這篇關(guān)于淺談SpringBoot @Autowired的兩種注入方式的文章就介紹到這了,更多相關(guān)SpringBoot @Autowired注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于shiro中部分SpringCache失效問題的解決方法
這篇文章主要給大家介紹了關(guān)于shiro中部分SpringCache失效問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-07-07
Java基礎(chǔ)教程之final關(guān)鍵字淺析
這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)教程之final關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
Java結(jié)構(gòu)型設(shè)計模式之組合模式Composite Pattern詳解
組合模式,又叫部分整體模式,它創(chuàng)建了對象組的數(shù)據(jù)結(jié)構(gòu)組合模式使得用戶對單個對象和組合對象的訪問具有一致性。本文將通過示例為大家詳細介紹一下組合模式,需要的可以參考一下2022-11-11
java InterruptedException 異常中斷的實現(xiàn)
本文主要介紹了java InterruptedException 異常中斷的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解
這篇文章主要介紹了關(guān)于Javaweb的轉(zhuǎn)發(fā)和重定向詳解,請求的轉(zhuǎn)發(fā),是指服務(wù)器收到請求后,從一個服務(wù)器端資源跳轉(zhuǎn)到同一個服務(wù)器端另外一個資源的操作,需要的朋友可以參考下2023-05-05

