第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

DI 將 String bean 作為 List<String> 的單個(gè)元素注入

DI 將 String bean 作為 List<String> 的單個(gè)元素注入

慕碼人2483693 2022-10-26 17:01:16
我是第一次學(xué)習(xí) Spring Framework 和 DI,并嘗試了一個(gè)帶有 Spring-boot 1.2.0 的小測(cè)試應(yīng)用程序(由于 Spring Framework 版本要求為 4.1.x,項(xiàng)目限制),我制作了一個(gè)具有兩個(gè)屬性的 BookBean:一個(gè)字符串標(biāo)題和一個(gè)作者列表。顯然 DI 將標(biāo)題作為列表的唯一成員注入,我完全不知道為什么。我在標(biāo)記為 @Bean 的方法上添加了一些日志記錄,以查看它們何時(shí)被調(diào)用以及 BookBean 構(gòu)造函數(shù),我注意到在調(diào)用構(gòu)造函數(shù)之后調(diào)用了 String 方法:[2019-04-29 14:46:05.631] boot - 3888  INFO [main] --- CollectionConfig: returning title: [A sample book][2019-04-29 14:46:05.637] boot - 3888  INFO [main] --- BookBean: construction called[2019-04-29 14:46:05.649] boot - 3888  INFO [main] --- CollectionConfig: returning authors: [[John, Adam, Harry]]這讓我相信 DI 在嘗試構(gòu)造 BookBean 時(shí)沒(méi)有可用的 List bean,并且“做了次好的事情”,返回一個(gè)注入了它知道的唯一 String bean 的 List:title。反過(guò)來(lái),這讓我相信我可能以錯(cuò)誤的方式做整個(gè) Autowired 事情,并且我可能無(wú)法按照要求按類(lèi)型/名稱(chēng)排列自動(dòng)裝配。據(jù)我了解,默認(rèn)自動(dòng)裝配是按類(lèi)型,構(gòu)造函數(shù)應(yīng)該嘗試查找兩種不同類(lèi)型的 bean:String 和 List,但我嘗試使用 @Bean(name = "title"/"authors" 注釋 bean ) 沒(méi)有成功。如果我還嘗試使用 @Qualifier("title"/"authors") 注釋構(gòu)造函數(shù)參數(shù),則會(huì)收到以下錯(cuò)誤:[2019-04-29 14:54:25.847] boot - 20824  INFO [main] --- CollectionConfig: returning title: [A sample book][2019-04-29 14:54:25.853] boot - 20824  WARN [main] --- AnnotationConfigEmbeddedWebApplicationContext: Exception encountered during context initialization - cancelling refresh attempt
查看完整描述

2 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

默認(rèn)情況下@Autowired會(huì)嘗試按類(lèi)型查找 bean。在您的BookBean課堂上,您正在注入 aString title和 a List<String> authors

Spring 在引擎蓋下做了什么?

字符串標(biāo)題- 它會(huì)找到一個(gè)String 類(lèi)型的 Bean (如果它找到多個(gè),它需要一個(gè) @Qualifier 來(lái)確定要注入哪個(gè)),在你的情況下@Bean String title()

列出作者- 它會(huì)嘗試查找所有String 類(lèi)型的 Bean,在您的場(chǎng)景中,您只有一個(gè):title()

總而言之,除非您使用注入它,否則您的List<String> authors()bean 將無(wú)法訪問(wèn)。@Resource(id ="authors")

退后幾步,你不應(yīng)該依賴(lài)原語(yǔ)進(jìn)行依賴(lài)注入,因?yàn)樗鼈兛赡軙?huì)誤導(dǎo)你。如果你真的需要使用依賴(lài)注入,我建議將它們包裝在一些類(lèi)中,也就是定義一個(gè)Title類(lèi)和一個(gè)Authors類(lèi)。


查看完整回答
反對(duì) 回復(fù) 2022-10-26
?
米琪卡哇伊

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊

當(dāng)類(lèi)型化集合或數(shù)組上存在 @Bean 注釋時(shí),該 bean 將自動(dòng)填充應(yīng)用程序上下文注冊(cè)的該類(lèi)型的所有 bean(請(qǐng)參閱參考文檔)。在您的情況下,這是titleben ( A sample book),因此authors列表僅包含該條目。

如果您想自動(dòng)裝配特定的 bean,您可以使用@Qualifier注解引用名稱(chēng)(請(qǐng)參閱參考文檔)。

在您的情況下,構(gòu)造函數(shù)可以重寫(xiě)為:

@Autowired

public BookBean(String title, @Qualifier("authors") List<String> authors) {

    this.title = title;

    this.authors = authors;

}

當(dāng)使用類(lèi)型化集合時(shí),參考文檔實(shí)際上是建議的(在灰色部分下方向下滾動(dòng)一點(diǎn))。您要使用 @Resource 注釋?zhuān)?/p>


private String title;


@Resource

private List<String> authors;


public BookBean(String title) {

    this.title = title;

}


查看完整回答
反對(duì) 回復(fù) 2022-10-26
  • 2 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)