掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
環(huán)境:spring5.2.15

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出黃山區(qū)免費(fèi)做網(wǎng)站回饋大家。
@Autowried注解首先根據(jù)byType注入,如果有多個(gè)的情況會(huì)按照byName注入,如果沒有符合的名稱那么系統(tǒng)將會(huì)報(bào)錯(cuò)。結(jié)合@Qualifier限定注入的Bean。
大意: 從spring4.3開始,如果目標(biāo)bean只定義了一個(gè)構(gòu)造函數(shù),則不再需要在這樣的構(gòu)造函數(shù)上使用@Autowired注釋。但是,如果有多個(gè)構(gòu)造函數(shù)可用,并且沒有主/默認(rèn)構(gòu)造函數(shù),則必須至少用@Autowired對(duì)其中一個(gè)構(gòu)造函數(shù)進(jìn)行注釋,以便指示容器使用哪個(gè)構(gòu)造函數(shù)。
示例:
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }
@Autowired可以將注釋應(yīng)用于具有任意名稱和多個(gè)參數(shù)的方法
示例:
- public class MovieRecommender {
- private MovieCatalog movieCatalog;
- private CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- public void prepare(MovieCatalog movieCatalog,CustomerPreferenceDao customerPreferenceDao) {
- this.movieCatalog = movieCatalog;
- this.customerPreferenceDao = customerPreferenceDao;
- }
- }
可以將@Autowired應(yīng)用于字段,甚至可以將其與構(gòu)造函數(shù)混合使用
- public class MovieRecommender {
- private final CustomerPreferenceDao customerPreferenceDao;
- @Autowired
- private MovieCatalog movieCatalog;
- @Autowired
- public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) {
- this.customerPreferenceDao = customerPreferenceDao;
- }
- }
可以通過將@Autowired注釋添加到需要該類型數(shù)組的字段或方法上
- public class MovieRecommender {
- @Autowired
- private MovieCatalog[] movieCatalogs;
- }
可以通過將@Autowired注釋添加到需要該類型集合類的字段或方法上
- public class MovieRecommender {
- private Set
movieCatalogs; - @Autowired
- public void setMovieCatalogs(Set
movieCatalogs) { - this.movieCatalogs = movieCatalogs;
- }
- }
注意:如果你希望數(shù)組或list列表注入的bean具有順序,那么你可以對(duì)bean實(shí)現(xiàn)Ordered接口或者是使用@Order注解或者標(biāo)準(zhǔn)的 @Priority(JavaEE) 注解。上面的Set不具有順序性
可以通過將@Autowired注釋添加到Map集合的字段或方法上
- public class MovieRecommender {
- private Map
movieCatalogs; - @Autowired
- public void setMovieCatalogs(Map
movieCatalogs) { - this.movieCatalogs = movieCatalogs;
- }
- }
這里的key為Bean的名稱。
注意:對(duì)于聲明的數(shù)組、集合或Map集合,至少需要一個(gè)匹配元素,否則會(huì)錯(cuò)誤。
默認(rèn)情況下使用@Autowired注解意味著是必須具有相應(yīng)的bean存在,否則程序報(bào)錯(cuò)??梢酝ㄟ^如下方式改變默認(rèn)行為
- public class SimpleMovieLister {
- private MovieFinder movieFinder;
- @Autowired(required = false)
- public void setMovieFinder(MovieFinder movieFinder) {
- this.movieFinder = movieFinder;
- }
- }
注意:如果這里沒有合適的MovieFinder類型的Bean那么這里的setter方法都不會(huì)執(zhí)行。如果這里是通過構(gòu)造函數(shù)注入,那么即便使用了required = false程序還是會(huì)報(bào)錯(cuò)。
可以通過Java 8的Java.util.Optional來表示特定依賴項(xiàng)的非必需性質(zhì)
- public class SimpleMovieLister {
- @Autowired
- public void setMovieFinder(Optional
movieFinder) { - }
- }
使用 @Nullable 注解標(biāo)準(zhǔn)非必須依賴項(xiàng)
- @Autowired
- public void setMovieFinder(@Nullable MovieFinder movieFinder) {
- System.out.println("-----movie") ;
- this.movieFinder = movieFinder;
- }
@Autowired可以用于注入 BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource
示例:
- @Autowired
- private ApplicationContext context;
注意:
大意:你不能直接在自定義的BeanPostProcessor或BeanFactoryPostProcessor內(nèi)使用@Autowired,@Inject,@Value,@Resource注解;必須通過XML或者@Bean 方法的形式進(jìn)行使用;如果這樣用可能會(huì)出現(xiàn)各種奇葩問題,你只需知道不要這么用即可。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流