开发者

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

I'm using annotations-based wiring (ie @Configurable(autowire=Autowire.BY_TYPE)) for a given class, and I'd like to wi开发者_运维技巧re 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?


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)


This should work:

@Configurable(autowire=Autowire.BY_TYPE) 
public class Target {

    @Autowired
    public void setConfigurers(List<Configurer> configurers) { ... }

}

This is described in section 3.9.2 of the Spring manual:

It is also possible to provide all beans of a particular type from the ApplicationContext by adding the annotation to a field or method that expects an array of that type [...] The same applies for typed collections.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜