自动assembly引用bean按types列入列表

我有一个具有Daemontypes对象列表的类。

 class Xyz { List<Daemon> daemons; } 

我的弹簧configuration看起来像这样。

 <bean id="xyz" class="package1.Xyz"> <property name="daemons" ref="daemonsList"> </bean> <bean id="daemon1" class="package1.DaemonImpl1"/> <bean id="daemon2" class="package1.DaemonImpl2"/> <bean id="daemonsList" class="java.util.ArrayList"> <constructor-arg> <list> <ref bean="daemon1" /> <ref bean="daemon2" /> </list> </constructor-arg> </bean> 

现在,而不是显式连接列表中的每个守护进程实现,是否可以自动装载列表中所有typesDaemon bean。 我想解决的问题是,如果有人创build了一个新的Daemon类实现的bean,并忘记将其连接到列表。

我已经看到了这个问题在stackoverflow的某处,但无法再find。 为此道歉。

它应该像这样工作(从XML中删除ArrayList bean):

 public Class Xyz { private List<Daemon> daemons; @Autowired public void setDaemons(List<Daemon> daemons){ this.daemons = daemons; } } 

我不认为有一种方法可以在XML中做到这一点。


见: 3.9.2。 @Autowired@Inject

通过将注解添加到需要该types的数组的字段或方法,可以从ApplicationContext提供特定types的所有Bean:

 public class MovieRecommender { @Autowired private MovieCatalog[] movieCatalogs; // ... } 

types化的集合也是如此:

 public class MovieRecommender { private Set<MovieCatalog> movieCatalogs; @Autowired // or if you don't want a setter, annotate the field public void setMovieCatalogs(Set<MovieCatalog> movieCatalogs) { this.movieCatalogs = movieCatalogs; } // ... } 

顺便说一句,从Spring 4.x开始, 这些列表可以使用@Ordered机制自动@Ordered