2013-02-15 3 views
7

У меня есть фасоль весны, а в Spring Bean у меня есть зависимость от списка других bean-компонентов. Мой вопрос: как я могу вставить общий список компонентов в качестве зависимости от этого компонента?Ввести список бобин с использованием Spring @Configuration аннотации

Например, некоторый код:

public interface Color { } 

public class Red implements Color { } 

public class Blue implements Color { } 

Мой боб:

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(); 
    } 
} 

Вопрос заключается в том, как мне получить список цветов в Painter? Кроме того, на стороне заметки: должен ли я @Configuration вернуть тип интерфейса или класс?

Спасибо за помощь!

+0

Возможный дубликат [Авто-проводка списка с помощью UTIL схемы дает NoSuchBeanDefinitionException] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – gstackoverflow

ответ

12

Что вы должны работать, имея @Resource или @Autowired на сеттере, следует вводить все экземпляры Color в поле List<Color>.

Если вы хотите быть более явным, вы можете вернуть коллекцию в качестве еще одного боба:

@Bean 
public List<Color> colorList(){ 
    List<Color> aList = new ArrayList<>(); 
    aList.add(blue()); 
    return aList; 
}  

и использовать его в качестве autowired поле таким образом:

@Resource(name="colorList") 
public void setColors(List<Color> colors) { 
    this.colors = colors; 
} 

ИЛИ

@Resource(name="colorList") 
private List<Color> colors; 

На вопрос о возврате интерфейса или реализации, нужно работать, но interf туз должен быть предпочтительным.

+0

Привет, Бижу, спасибо за ответ. Я также подумал, что это сработает, но коллега сказал, что при развертывании Spring бросил исключения. Я исследую это немного больше. Между тем, я использовал подобный подход, как тот, который вы предложили. –

+0

Отлично! Только то, что я искал! – Flyingcows00

+0

Есть ли способ внедрить список в другой метод '@ Bean'? По-видимому, «Список» неудобно вводить по имени. Рекомендации должны использовать '@ Resource', но это не работает как параметр метода. – Stewart

Смежные вопросы