關(guān)于@Autowired的使用及注意事項
@Autowired 注意事項
簡單來說就是 在類型正確的前提下,先根據(jù)名字找,沒找到時再根據(jù)類型找
例子如下:
如果容器中存在一個bean,這個bean的類型和id與被標注@Autowired的屬性或者方法參數(shù)的類型和名稱相同,那么此時的@Autowired相當于
@Autowired
@Qualifier("屬性名")
例如:
存在一個接口TestInterface,有兩個實現(xiàn)類分別是TestClass1和TestClass2都在spring容器中,此時有一個SomeClass類需要注入一個TestInterface屬性
代碼如下:
@Component
@Slf4j
public class SomeClass {
@Autowired
//這種方式會報錯,因為存在兩個TestInterface類型的bean
private TestInterface testInterface;
//不會報錯,因為此時相當于
/*
@Autowired
@Qualifier("testClass1")
*/
@Autowired
private TestInterface testClass1;
public TestInterface getTestClass() {
return testClass1;
}
}
可以在某一個組件上加上@Primary,強制使用該類型,比如
@Component
@Primary
public class TestClass2 implements TestInterface {
private String s="testClass2";
public String getS() {
return s;
}
}
那么
@Autowired private TestInterface testClass1;
testClass1此時的類型是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的形式,(可以不寫,會默認@Autowired),并且默認通過名字注入,相當于
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ù)名字注入
同時使用@Autowired和@Qualifier("beanName")
@Autowired
@Qualifier("beanName")
private MybatisCardMapper mapper;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)的模糊匹配某文件夾下的文件并刪除功能示例
這篇文章主要介紹了Java實現(xiàn)的模糊匹配某文件夾下的文件并刪除功能,涉及java針對目錄與文件的遍歷、匹配、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
Java兩整數(shù)相除向上取整的方式詳解(Math.ceil())
在調(diào)外部接口獲取列表數(shù)據(jù)時,需要判斷是否已經(jīng)取完了所有的值,因此需要用到向上取整,下面這篇文章主要給大家介紹了關(guān)于Java兩整數(shù)相除向上取整的相關(guān)資料,需要的朋友可以參考下2022-06-06
IDEA中啟動多個SpringBoot服務的實現(xiàn)示例
本文主要介紹了IDEA中啟動多個SpringBoot服務的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
簡談java并發(fā)FutureTask的實現(xiàn)
這篇文章主要介紹了簡談java并發(fā)FutureTask的實現(xiàn),FutureTask都是用于獲取線程執(zhí)行的返回結(jié)果。文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下2019-06-06

