没有开箱即用的工具可以做到这一点,没有。但是,如果您想要一种无需使用@Autowired列表即可将给定类型的所有bean收集到一个集合中的方法,那么可以很容易地编写一个自定义方法
FactoryBean来为您做这件事:
public class BeanListFactoryBean<T> extends AbstractFactoryBean<Collection<T>> { private Class<T> beanType; private @Autowired ListableBeanFactory beanFactory; @Required public void setBeanType(Class<T> beanType) { this.beanType = beanType; } @Override protected Collection<T> createInstance() throws Exception { return beanFactory.getBeansOfType(beanType).values(); } @Override public Class<?> getObjectType() { return Collection.class; } }然后
<bean > <property name="options"> <bean > <property name="beanType" /> </bean> </property> </bean>
但是,这一切似乎都需要花很多精力来避免
@Autowired进入您的原始课堂。根本就没有违反SoC的情况-
没有编译时依赖性,也不知道SoC的
options来源。



