關(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)錯(cuò),因?yàn)榇嬖趦蓚€(gè)TestInterface類型的bean
private TestInterface testInterface;
//不會報(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)制使用該類型,比如
@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ù)據(jù)類型和運(yùn)算符詳解
這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下2020-02-02
java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)
下面小編就為大家?guī)硪黄猨ava實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
Spring實(shí)戰(zhàn)之容器中的工程Bean用法示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之容器中的工程Bean用法,結(jié)合實(shí)例形式分析了Sring框架容器中的工程Bean相關(guān)配置、使用操作技巧,需要的朋友可以參考下2019-11-11
Java中forward轉(zhuǎn)發(fā)與redirect重定向的區(qū)別
轉(zhuǎn)發(fā)和重定向都是常用的頁面跳轉(zhuǎn)方式,但在實(shí)現(xiàn)上有一些區(qū)別,本文主要介紹了Java中forward轉(zhuǎn)發(fā)與redirect重定向的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
Java解決線程的不安全問題之volatile關(guān)鍵字詳解
這篇文章主要介紹了Java解決線程的不安全問題之volatile關(guān)鍵字詳解,可見性指一個(gè)線程對共享變量值的修改,能夠及時(shí)地被其他線程看到,而 volatile 關(guān)鍵字就保證內(nèi)存的可見性,需要的朋友可以參考下2023-08-08
SpringMVC前后端傳值的幾種實(shí)現(xiàn)方式
本文主要介紹了SpringMVC前后端傳值的方式實(shí)現(xiàn),包括使用HttpServletRequest、HttpSession、Model和ModelAndView等方法,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02
SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)
文章詳細(xì)介紹了SpringValidation的使用,包括簡單使用、requestBody參數(shù)校驗(yàn)、requestParam/PathVariable參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、集合校驗(yàn)、自定義校驗(yàn)、編程式校驗(yàn)、快速失敗、@Valid和@Validated的區(qū)別以及實(shí)現(xiàn)原理2024-12-12

