2013-02-15 4 views
7

Spring bean이 있고 Spring Bean에는 다른 bean 목록에 대한 종속성이 있습니다. 내 질문은 : 빈의 종속성 목록으로 빈의 일반 목록을 삽입하려면 어떻게해야합니까? 예를 들어Spring @Configuration annotation을 사용하여 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 인터페이스 유형 또는 클래스를 반환해야합니까?

도움 주셔서 감사합니다.

+0

[유틸리티 스키마를 사용하여 목록 자동 연결은 NoSuchBeanDefinitionException을 발생시킵니다.] (http://stackoverflow.com/questions/1363310/auto-wiring-a-list-using-util-schema-gives-nosuchbeandefinitionexception) – gstackoverflow

답변

12

세터에서 @Resource 또는 @Autowired을 사용하면 어떤 색상이든 List<Color> 필드에 주입해야합니다.

좀 더 명시 할 경우, 다른 빈으로 컬렉션을 반환 할 수 있습니다

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

하고 autowire가 필드로이 방법을 사용

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

또는

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

인터페이스 또는 구현을 반환하는 방법에 대한 질문 중 하나를 작동해야하지만 interf 에이스가 선호됩니다.

+0

안녕 Biju, 대답 ​​주셔서 감사합니다. 나는 또한 그것이 효과가있을 것이라고 생각했지만 동료는 전개 할 때 Spring이 예외를 던졌다 고 말했다. 나는 그것을 조금 더 조사 할 것이다. 그 동안 나는 당신이 제안한 것과 비슷한 접근 방식을 사용했습니다. –

+0

완벽! 그냥 내가 뭘 찾고 있었는지! – Flyingcows00

+0

리스트를 다른'@ Bean' 메소드에 삽입하는 방법이 있습니까? 분명히'List'는 이름으로 주입하기가 어색합니다. 권장 사항은'@ Resource'를 사용하는 것이지만 이것은 메소드 매개 변수로 작동하지 않습니다. – Stewart