2014-11-04 4 views
2

두 개의 스프링 구성 파일 (ConfigA.javaConfigB.java)이 있다고 가정합니다. 내가하면다른 Java 기반 Spring 구성 파일에 정의 된 프로토 타입 빈 사용

@Configuration 
@Import(ConfigA.class) 
class ConfigB { 

    @Bean public Bar bar() { 
     return new Bar(*** how to inject Foo instance here? ***); 
    } 

    @Bean public Buzz buzz() { 
     return new Buzz(*** how to inject Foo instance here? ***); 
    }  
} 

: 나는 ConfigB.java에 선언 싱글 범위의 콩의 숫자로 Foo의 몇 가지 인스턴스를 주입하려면 지금

@Configuration 
class ConfigA { 

    @Scope("prototype") 
    @Bean public Foo fooPrototype() { 
     return new Foo(params); 
    } 
} 

그리고 다음은

처럼 보일 수 있습니다 방법 ConfigA.java입니다 단일 구성 파일이 있다면 별표로 묶인 블록을 fooPrototype()으로 간단히 바꿉니다.

그러나 bar() 및 buzz() beans에 다른 Foo 인스턴스를 삽입하는 방법은 fooPrototype()이 다른 구성 파일에 선언되어 있습니까?

답변

2

이는 스프링 설명서 §5.12.5 Composing Java-based configurations의 예와 비슷합니다.

같은 페이지에서 해결책을 찾을 수 있습니다. 구성 빈을 구성 할 수 있습니다.

@Configuration 
@Import(ConfigA.class) 
class ConfigB { 

    @Autowired ConfigA configA; 

    @Bean public Bar bar() { 
     return new Bar(configA.fooPrototype()); 
    } 

    @Bean public Buzz buzz() { 
     return new Buzz(configA.fooPrototype()); 
    } 
} 
1

그냥 메서드 arg로 fooPrototype을 전달할 수 없습니까? 예 :

@Bean public Bar bar(Foo fooPrototype) { 
    return new Bar(fooPrototype); 
} 

@Bean public Buzz buzz(Foo fooPrototype) { 
    return new Buzz(fooPrototype); 
}