I've got a Spring bean, and in the Spring Bean I have a dependency on a list of other beans. My question is: how can I inject a Generic list of beans as a dependency of that bean?
For example, some code:
public interface Color { }
public class Red implements Color { }
public class Blue implements Color { }
My bean:
public class Painter {
private List<Color> colors;
@Resource
public void setColors(List<Color> colors) {
this.colors = colors;
}
}
@Configuration
public class MyConfiguration {
@Bean
public Red red() {
return new Red();
}
@Bean
public Blue blue() {
return new Blue();
}
@Bean
public Painter painter() {
return new Painter();
}
}
The question is; how do I get the list of colors in the Painter? Also, on a side note: should I have the @Configuration return the Interface type, or the class?
Thanks for the help!
What you have should work, having a @Resource
or @Autowired
on the setter should inject all instances of Color to your List<Color>
field.
If you want to be more explicit, you can return a collection as another bean:
@Bean
public List<Color> colorList(){
List<Color> aList = new ArrayList<>();
aList.add(blue());
return aList;
}
and use it as an autowired field this way:
@Resource(name="colorList")
public void setColors(List<Color> colors) {
this.colors = colors;
}
OR
@Resource(name="colorList")
private List<Color> colors;
On your question about returning an interface or an implementation, either one should work, but interface should be preferred.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With