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

