自动assembly引用bean按types列入列表
我有一个具有Daemon
types对象列表的类。
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
。