8

私はSpring Beanを持っています.Spring Beanでは、他のBeanのリストに依存しています。私の質問は、その Bean の依存関係として Bean の汎用リストをどのように注入できますか?

たとえば、いくつかのコード:

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 に Interface タイプまたはクラスを返させる必要がありますか?

助けてくれてありがとう!

4

1 に答える 1

16

あなたが持っているものはうまくいくはずです、@Resourceまたはセッターの上にあることはあなたのフィールド@Autowiredに色のすべてのインスタンスを注入するべきです。List<Color>

より明確にしたい場合は、コレクションを別のBeanとして返すことができます。

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

このように自動配線フィールドとして使用します。

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

また

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

インターフェイスまたは実装を返すことについての質問では、どちらかが機能するはずですが、インターフェイスが優先されます。

于 2013-02-15T11:36:52.433 に答える