2013-02-15 14 views
7

Mam Spring bean, a w Spring Bean mam zależność od listy innych fasoli. Moje pytanie brzmi: jak mogę wprowadzić ogólną listę fasoli jako zależność tej fasoli?Wprowadzić listę ziaren przy użyciu adnotacji Spring @Configuration

Na przykład, niektóre kod:

public interface Color { } 

public class Red implements Color { } 

public class Blue implements Color { } 

Moja fasola:

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

Pytanie brzmi; jak uzyskać listę kolorów w programie Painter? Również na marginesie: czy powinienem mieć @Configuration zwrócić typ interfejsu, czy klasy?

Dzięki za pomoc!

+0

Prawdopodobny duplikat [Automatyczne okablowanie listy za pomocą schematu uzyskuje wyjątek NoSuchBeanDefinitionException] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – gstackoverflow

Odpowiedz

12

To, co powinieneś/powinnaś mieć, mając @Resource lub @Autowired na setera powinno wstrzyknąć wszystkie instancje koloru do twojego pola List<Color>.

Jeśli chcesz być bardziej wyraźne, można powrócić do kolekcji jako kolejny Fasola:

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

i używać go jako pole autowired ten sposób:

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

LUB

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

W pytaniu dotyczącym zwrotu interfejsu lub implementacji albo powinien działać, ale interfejs As powinien być preferowany.

+0

Cześć Biju, dzięki za odpowiedź. Myślałem także, że to zadziała, ale kolega powiedział, że podczas wdrażania, Spring rzucił wyjątki. Zbadam to jeszcze trochę. W międzyczasie użyłem podejścia podobnego do tego, które zasugerowałeś. –

+0

Idealny! Właśnie tego szukałem! – Flyingcows00

+0

Czy istnieje sposób, aby wprowadzić listę do innej metody @ @ Bean'? Wygląda na to, że 'List' jest niewygodne, aby wstrzykiwać nazwę. Zalecenia mają używać '@ Resource', ale to nie działa jako parametr metody. – Stewart

Powiązane problemy