是否可以将@Autowired
与列表一起使用?
就像我有mimetypes的属性文件一样,在我的类文件中我有类似的东西
@Autowired
private List<String> mimeTypes = new ArrayList<String>();
答案 0 :(得分:40)
Spring 4支持自动收集给定类型的所有bean并将它们注入到集合或数组中的能力。
示例:
@Component
public class Car implements Vehicle {
}
@Component
public class Bus implements Vehicle {
}
@Component
public class User {
@Autowired
List<Vehicle> vehicles;//contains car and bus
}
答案 1 :(得分:33)
@Qualifier("..")
,而是尝试使用
private @Resource(name="..") List<Strings> mimeTypes;
答案 2 :(得分:10)
您甚至可以在spring .xml中创建java.util.List
并通过@Qualifier
将其注入您的应用程序。来自泉源http://static.springsource.org/spring/docs/current/reference/xsd-config.html:
<!-- creates a java.util.List instance with the supplied values -->
<util:list id="emails">
<value>pechorin@hero.org</value>
<value>raskolnikov@slums.org</value>
<value>stavrogin@gov.org</value>
<value>porfiry@gov.org</value>
</util:list>
所以这会改变你的布线:
@Autowired
@Qualifier("emails")
private List<String> mimeTypes = new ArrayList<String>();
我会建议这种方法,因为无论如何你都要注入一个字符串列表。
喝彩!
<强> 修改 强>
如果要注入属性,请查看此How can I inject a property value into a Spring Bean which was configured using annotations?
答案 3 :(得分:1)
我认为你至少需要一个限定词。对“new”的调用似乎与使用Spring的想法背道而驰。你对Spring的角色很困惑。如果你调用“new”,那么该对象不受Spring的控制。
答案 4 :(得分:0)
如果autowired bean在同一个(@Configuration
)类中声明,并且您需要它来声明另一个bean,那么以下工作:
@Bean
public BeanWithMimeTypes beanWithMimeTypes() {
return new BeanWithMimeTypes(mimeTypes());
}
@Bean
public List<String> mimeTypes() {
return Arrays.<String>asList("text/html", "application/json);
}
当然,即使您在另一个配置中覆盖mimeTypes
bean,它也能正常运行。无需明确的@Qualifier
或@Resource
注释。
答案 5 :(得分:-1)
只要列表是bean,您就应该能够自动装配它。然后,您可以使用@Qualifier
告诉Spring使用哪个bean /列表。见http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers