2012-06-11 4 views
1

@Component 주석을 사용하여 구성한 bean 목록 인 bean을 정의하려고합니다. 나는 봄 3.1을 사용하고있다. 내가 찾는거야하는 자원 중 하나가 초기화 된 전에 getResourceLst 호출지고 있다는 점이다 Bean을 반환하기 전에 구성에 리소스를 주입하는 방법은 무엇입니까?

@Configuration 
public class ReferenceDataConfig { 
    private ResourceA resourceA; 

    @Resource 
    private ResourceB resourceB; 

    @Resource 
    private ResourceC resourceC; 

    @Resource 
    private ResourceD resourceD; 

    @Bean (name = "myResourceList") 
    public List<MyResource> getResourceLst() { 
     return Arrays.asList(
       resourceA 
       , resourceB 
       , resourceC 
       , resourceD 
     ); 
    } 

    @Resource (name = "resourceA") 
    public void setResourceA(ResourceA resourceA) { 
     this.resourceA = resourceA; 
    } 

처럼

내 @Configuration 클래스 보인다. setResourceA 메서드를 추가하면 결국 호출되지만, 너무 늦었을 때가되었습니다. myResourceList bean이 이미 작성되었습니다.

이 문제는 어떻게 해결해야합니까? 피터

답변

0

봄에 발생 가능한 버그. 내가해야 할 일을 수집하지만, 다음 해결 방법은 나를위한 트릭입니다.

@Configuration 
public class ReferenceDataConfig { 
    @Bean (name = "myResourceList") 
    public List<MyResource> getResourceLst(ResourceA resourceA, ResourceB resourceB, ResourceC resourceC, ResourceD resourceD) { 
     return Arrays.asList(
       resourceA 
       , resourceB 
       , resourceC 
       , resourceD 
     ); 
    } 
0

당신이 할하려는 정확히 무엇에 따라

덕분에,이 솔루션은 당신이 생각하는 것보다 더 간단 할 수 있습니다.

MyResource 유형의 모든 bean이 포함될 것으로 예상되는 경우, 해당 목록에 대해 별도의 bean을 선언하지 않아도됩니다. 다른 빈을 주입 할 때처럼 목록을 삽입 할 수 있으며 Spring은 응용 프로그램 컨텍스트에서 찾은 MyResource 유형의 모든 빈을 모으고 모두 List<MyResource> 오브젝트로 주입합니다.

+0

어느 시점에서 유용 할 수 있습니다. 그러나이 경우 목록의 순서가 중요합니다. –

관련 문제