按类型将参考bean自动连线到列表中

我有一类具有Daemon类型的对象列表。

class Xyz {    

List<Daemon> daemons;

}

我的spring配置看起来像这样。

<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>

现在,可以Daemon在列表中自动自动连接所有类型的bean,而不是显式连接列表中的每个守护程序实现。我要解决的问题是,如果有人创建了Daemon类的新实现的bean,却忘记将其连接到列表中。

我已经在stackoverflow上的某个地方看到了这个问题,但无法再次找到它。对此表示歉意。

回答:

它应该像这样工作(从你的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:

通过将注释添加到需要该类型数组的字段或方法中,还可以从ApplicationContext提供特定类型的所有bean:

public class MovieRecommender {

@Autowired

private MovieCatalog[] movieCatalogs;

// ...

}

对于类型化的集合也是如此:

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机制自动排序。

以上是 按类型将参考bean自动连线到列表中 的全部内容, 来源链接: utcz.com/qa/411296.html

回到顶部