Is there a way in Spring to autowire all dependencies of a given type?

Naftuli Kay picture Naftuli Kay · Aug 16, 2011 · Viewed 7.1k times · Source

I'm using annotations-based wiring (ie @Configurable(autowire=Autowire.BY_TYPE)) for a given class, and I'd like to wire all beans of a given type into it as a list:

application context:

<beans>
    <bean class="com.my.class.FirstConfigurer"/>
    <bean class="com.my.class.SecondConfigurer"/>
</beans>

class to autowire into:

@Configurable(autowire=Autowire.BY_TYPE) public class Target {
    ...
    public void setConfigurers(List<Configurer> configurers) { ... }
}

All dependencies implement a common interface called Configurer

Is there a way to make this work to have all dependencies of a type wired together in a collection and injected where necessary, or should I define a <list> in XML or something?

Answer

Bozho picture Bozho · Aug 16, 2011

Yes,

@Inject
private List<Configurer> configurers;

works, and you get a list of all beans implementing the interface. (multiple variations - @Inject or @Autowired, field, setter or constructor injection - all work)