淺談SpringBoot @Autowired的兩種注入方式
Autowired有兩種注入方式
by type by name默認(rèn)使用的是byType的方式向Bean里面注入相應(yīng)的Bean。例如:
@Autowiredprivate UserService userService;
這段代碼會(huì)在初始化的時(shí)候,在spring容器中尋找一個(gè)類型為UserService的bean實(shí)體注入,關(guān)聯(lián)到userService的引入上。但是如果UserService這個(gè)接口存在多個(gè)實(shí)現(xiàn)類的時(shí)候,就會(huì)在spring注入的時(shí)候報(bào)錯(cuò),例如:
public class UserService1 implements UserServicepublic class UserService2 implements UserService
此時(shí)會(huì)報(bào)錯(cuò) org.springframework.beans.factory.BeanCreationException,而原因是注入的時(shí)候發(fā)現(xiàn)有2個(gè)匹配的bean,但是不知道要注入哪一個(gè):expected single matching bean but found 2: userService1,userService2我們改成以下方式:
@Autowiredprivate UserService userService1;@Autowiredprivate UserService userService2;@Autowired@Qualifier(value = 'userService2')private UserService userService3;@Testpublic void test(){ System.out.println(userService1.getClass().toString()); System.out.println(userService2.getClass().toString()); System.out.println(userService3.getClass().toString());}
運(yùn)行結(jié)果:
class yjc.demo.serviceImpl.UserService1class yjc.demo.serviceImpl.UserService2class yjc.demo.serviceImpl.UserService2
運(yùn)行結(jié)果成功,說明了2種處理多個(gè)實(shí)現(xiàn)類的方法:
1.變量名用userService1,userService2,而不是userService。通常情況下@Autowired是通過byType的方法注入的,可是在多個(gè)實(shí)現(xiàn)類的時(shí)候,byType的方式不再是唯一,而需要通過byName的方式來注入,而這個(gè)name默認(rèn)就是根據(jù)變量名來的。
2.通過@Qualifier注解來指明使用哪一個(gè)實(shí)現(xiàn)類,實(shí)際上也是通過byName的方式實(shí)現(xiàn)。由此看來,@Autowired注解到底使用byType還是byName,其實(shí)是存在一定策略的,也就是有優(yōu)先級(jí)。優(yōu)先用byType,而后是byName。
到此這篇關(guān)于淺談SpringBoot @Autowired的兩種注入方式的文章就介紹到這了,更多相關(guān)SpringBoot @Autowired注入內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 如何基于python3和Vue實(shí)現(xiàn)AES數(shù)據(jù)加密2. Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送3. 10個(gè)提供免費(fèi)PHP腳本下載的網(wǎng)站4. php5.6不能擴(kuò)展redis.so的解決方法5. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值6. PHP獲取時(shí)間戳等相關(guān)函數(shù)匯總7. Java向Runnable線程傳遞參數(shù)方法實(shí)例解析8. PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】9. Python編寫nmap掃描工具10. python 爬取嗶哩嗶哩up主信息和投稿視頻
