2 回答

TA貢獻1827條經驗 獲得超9個贊
默認情況下@Autowired
會嘗試按類型查找 bean。在您的BookBean
課堂上,您正在注入 aString title
和 a List<String> authors
。
Spring 在引擎蓋下做了什么?
字符串標題- 它會找到一個String 類型的 Bean (如果它找到多個,它需要一個 @Qualifier 來確定要注入哪個),在你的情況下@Bean String title()
列出作者- 它會嘗試查找所有String 類型的 Bean,在您的場景中,您只有一個:title()
總而言之,除非您使用注入它,否則您的List<String> authors()
bean 將無法訪問。@Resource(id ="authors")
退后幾步,你不應該依賴原語進行依賴注入,因為它們可能會誤導你。如果你真的需要使用依賴注入,我建議將它們包裝在一些類中,也就是定義一個Title
類和一個Authors
類。

TA貢獻1998條經驗 獲得超6個贊
當類型化集合或數組上存在 @Bean 注釋時,該 bean 將自動填充應用程序上下文注冊的該類型的所有 bean(請參閱參考文檔)。在您的情況下,這是title
ben ( A sample book
),因此authors
列表僅包含該條目。
如果您想自動裝配特定的 bean,您可以使用@Qualifier
注解引用名稱(請參閱參考文檔)。
在您的情況下,構造函數可以重寫為:
@Autowired
public BookBean(String title, @Qualifier("authors") List<String> authors) {
this.title = title;
this.authors = authors;
}
當使用類型化集合時,參考文檔實際上是建議的(在灰色部分下方向下滾動一點)。您要使用 @Resource 注釋:
private String title;
@Resource
private List<String> authors;
public BookBean(String title) {
this.title = title;
}
添加回答
舉報