關(guān)于@Autowired的使用及注意事項(xiàng)
@Autowired 注意事項(xiàng)
簡單來說就是 在類型正確的前提下,先根據(jù)名字找,沒找到時(shí)再根據(jù)類型找
例子如下:
如果容器中存在一個(gè)bean,這個(gè)bean的類型和id
與被標(biāo)注@Autowired
的屬性或者方法參數(shù)的類型和名稱相同,那么此時(shí)的@Autowired
相當(dāng)于
@Autowired @Qualifier("屬性名")
例如:
存在一個(gè)接口TestInterface
,有兩個(gè)實(shí)現(xiàn)類分別是TestClass1
和TestClass2
都在spring容器中,此時(shí)有一個(gè)SomeClass
類需要注入一個(gè)TestInterface
屬性
代碼如下:
@Component @Slf4j public class SomeClass { @Autowired //這種方式會報(bào)錯,因?yàn)榇嬖趦蓚€(gè)TestInterface類型的bean private TestInterface testInterface; //不會報(bào)錯,因?yàn)榇藭r(shí)相當(dāng)于 /* @Autowired @Qualifier("testClass1") */ @Autowired private TestInterface testClass1; public TestInterface getTestClass() { return testClass1; } }
可以在某一個(gè)組件上加上@Primary
,強(qiáng)制使用該類型,比如
@Component @Primary public class TestClass2 implements TestInterface { private String s="testClass2"; public String getS() { return s; } }
那么
@Autowired private TestInterface testClass1;
testClass1
此時(shí)的類型是TestClass2
@Autowired放的位置
1.放在屬性前,比如controller
層調(diào)用service
層,加在屬性前不會調(diào)用set
方法
@RestController @RequestMapping("/student/card") public class CardController { @Autowired CardService cardService; }
2.放在set
方法前,會通過調(diào)用set
方法給屬性賦值
@RestController @RequestMapping("/student/card") public class CardController { CardService cardService; @Autowired public void setCardService(CardService cardService) { this.cardService = cardService; } }
3.寫在set
方法的參數(shù)列表中:只能是@Bean
的形式,(可以不寫,會默認(rèn)@Autowired
),并且默認(rèn)通過名字注入,相當(dāng)于
public SomeClass someClass(@Autowired @Qualifier("card") Card card)
@Bean public SomeClass someClass(@Autowired Card card){ SomeClass someClass=new SomeClass(); someClass.setCard(card); return someClass; } @Bean public Card card(){ Card card=new Card(); card.setStudentId("01"); return card; }
根據(jù)名字注入
同時(shí)使用@Autowired
和@Qualifier("beanName")
@Autowired @Qualifier("beanName") private MybatisCardMapper mapper;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的模糊匹配某文件夾下的文件并刪除功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的模糊匹配某文件夾下的文件并刪除功能,涉及java針對目錄與文件的遍歷、匹配、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02基于opencv+java實(shí)現(xiàn)簡單圖形識別程序
這篇文章主要給大家介紹了如何基于opencv+java實(shí)現(xiàn)簡單圖形識別程序的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())
在調(diào)外部接口獲取列表數(shù)據(jù)時(shí),需要判斷是否已經(jīng)取完了所有的值,因此需要用到向上取整,下面這篇文章主要給大家介紹了關(guān)于Java兩整數(shù)相除向上取整的相關(guān)資料,需要的朋友可以參考下2022-06-06IDEA中啟動多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例
本文主要介紹了IDEA中啟動多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08簡談java并發(fā)FutureTask的實(shí)現(xiàn)
這篇文章主要介紹了簡談java并發(fā)FutureTask的實(shí)現(xiàn),FutureTask都是用于獲取線程執(zhí)行的返回結(jié)果。文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06利用Java寫一個(gè)學(xué)生管理系統(tǒng)
今天這篇文章就給給大家分享利用Java寫一個(gè)學(xué)生管理系統(tǒng)吧,先寫一個(gè)簡單的用List來實(shí)現(xiàn)學(xué)生管理系統(tǒng):2021-09-09