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;
}
添加回答
举报