2012-02-12 3 views
1

으로 목록에 패키지의 모든 인스턴스를 추가 나는 추가 방법 클래스 "상자"모든 과일을 수용해야 이 클래스는 모든 IFruits 구현이 추가 될 것입니다 (패키지 xyfruits, inst. xyfruits.Apple에 표시됨).

첫 번째 부분은 간단합니다 :

<bean id="box" class="x.y.Box"/> 

하지만 어떻게 모든 IFruit 인스턴스를 연결할 수 있나요?

감사합니다. 당신이 목록의 세터를 만드는 경우

+2

이 질문과 대답은 무엇입니까? http://stackoverflow.com/a/9144271/280244 – Ralph

+0

인스턴스로 선언 된 콩을 의미하거나 콩으로 실제로 선언하지 않고 모든 구현 클래스의 단일 인스턴스를 수집하려면? – mrembisz

답변

3

, 당신은 봄 응용 프로그램 컨텍스트에서 IFruit 인터페이스의 모든 인스턴스를 찾아 그들을로드, 아무것도 정의 할 필요가 없습니다. 물론

public class Box { 
    @Autowired 
    List <IFruit> fruits; //This should contain all IFruit's in the ApplicationContext 

    public void add (IFruit fruit) { 
     fruits.add(fruit); 
    } 
} 

을, 당신은 추가해야 요소 <context:annotation-config/>@Autowired의 XML 구성에 적용하면 ...

2

setFruits, 당신은 이런 식으로 연결할 수 있습니다 말 :

<bean id="box" class="x.y.Box"> 
    <property name="fruits"> 
    <list> 
     <ref bean="fruit1" /> 
     <ref bean="fruit2" /> 
     ... 
    </list> 
    </property> 
</bean> 

<bean id="fruit1" class="x.y.fruits.Apple" /> 
... 

당신은이 유사하게 사용하여 생성자 주입을 할 수 있습니다. 당신이 필드를 @Autowire 경우

+0

좋습니다! 하지만 모든 수업을 나열해야합니까? 주어진 패키지에서 모든 클래스를 사용하고 싶습니다. –

+1

@ Vojtěch : 클래스를 한 곳에서 나열해야합니다. 주어진 패키지의 모든 클래스를 자동으로 찾는 방법은 없습니다. – casablanca