Spring自动挂载列表

kar*_*arq 29 spring list autowired

是否可以使用@Autowired列表?

就像我有mimetypes属性文件一样,在我的类文件中我有这样的东西

@Autowired
private List<String> mimeTypes = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

Tho*_*Tho 47

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
}
Run Code Online (Sandbox Code Playgroud)

参考:Spring 4订购Autowired Collections

  • 当没有定义该类型的bean时会发生什么?它会自动挂载一个空列表吗? (2认同)

Joh*_*erg 33

@Qualifier("..")气馁,而是尝试自动装配按姓名使用

private @Resource(name="..") List<Strings> mimeTypes;
Run Code Online (Sandbox Code Playgroud)

另请参见如何自动装配factorybean.

  • +1很棒的发现!我只想弄清楚为什么我不能让这个场景起作用. (2认同)

chz*_*gla 10

您甚至可以java.util.List在spring .xml中创建一个并将其注入@Qualifier您的应用程序.来自Springsource 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>
Run Code Online (Sandbox Code Playgroud)

所以这会改变你的布线:

 @Autowired
 @Qualifier("emails")
 private List<String> mimeTypes = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

我会建议这种方法,因为你无论如何都要注入一个字符串列表.

干杯!

编辑

如果你想注入属性,请看看这个如何将属性值注入使用注释配置的Spring Bean?


sbl*_*ndy -1

只要列表是一个 bean,您就应该能够自动装配它。然后,您可以使用 来@Qualifier告诉 Spring 使用哪个 bean/列表。请参阅http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-autowired-annotation-qualifiers