2016-10-24 2 views
0

다른 Bean을 정의하기 위해 MyConfig (Spring Configuration file)가 Bean 중 하나의 생성자에서 참조되는 프로그램 중 하나를 보았습니다. MyConfig. 이러한 종류의 구성에 대해 확신하지 못합니다. 이런 종류의 코드에서는 순환 참조를 볼 수 있지만 잘 작동하지만 그 흐름을 이해할 수는 없습니다. 어떻게 작동하는지. 여기Spring 생성자에서 Spring이 생성 된 클래스에서 다른 Bean을 가져 오기 위해 Config 참조를 사용했습니다.

@Configuration 
public class MyConfig { 

    @Bean(name="a") 
    @Scope("prototype") 
    public A getA() { 
     return new A(); 
    } 

    @Bean(name="b") 
    @Scope("prototype") 
    public B getB() { 
     return new B(); 
    } 

    @Bean(name="c") 
    @Scope("prototype") 
    public C getC() { 
     return new C(); 
    } 

    @Bean(name="queueListener") 
    @Scope("singleton") 
    public Queue getQueue() { 
     return new Queue(MyConfig config); 
    } 

} 

내 큐 클래스입니다 - - 아래는 그 코드의 복제는 그래서 제 질문이 있다는 것입니다

public class Queue implements MessageListener{ 

    private MyConfig config; 

    public Q(MyConfig config) { 
     this.config = config; 
    } 

    @Override 
    public void onMessage() { 
     createC(); 
    } 

    public void createC() { 
     C cObj = config.getC(); 
     cObj.setConfig(config); 
     cObj.performTask(); 
    } 
} 

클래스는 "C"이다는 this-

public class C{ 

    private transient MyConfig config; 
    private MyConfig config; 

    public C() {  
    } 

    public void setConfig(MyConfig config) { 
     this.config = config; 
    } 

    public MyConfig getConfig() { 
     return config; 
    } 

    public void performTask() {  
     A a = config.getA(); // Is it right way to get bean? 
     B b = config.getB(); 
    } 

} 

처럼 다른 콩에서 콩을 얻는 것이 옳은가요? 리턴 객체는 실제로 스프링 빈 객체 또는 간단한 자바 클래스 객체일까요?

위의 코드에서 순환 참조를 볼 수 있습니다. MyConfig 내에서 Queue 클래스의 인스턴스가 만들어지면 MyConfig의 인스턴스/참조를 취합니다. 순환 참조가 생성됩니까? My Architect가 Queue 및 클래스 "C"클래스 모두에서 응용 프로그램 컨텍스트를 자동 배선하는 대신 위의 방법으로 제안했습니다. 건축가에 따르면 문맥은 매우 무겁고 모범 사례는 아닙니다.

빈 큐를 생성 할 때 실행주기 또는 호출 계층 구조는 어떻게됩니까? 위의 코드 작업을 이해하는 것이 도움이 될 것입니다.

답변

0

Spring Boot @Autowired creating instances on a runtime 의 예를 참조하십시오 당신은 정말 콘크리트 콩으로 구성 인스턴스를 주입하는 나쁜 생각 싱글 및 프로토 타입 올바른 방법

+0

링크 권장하지만, 동료 사용자가 어떤 생각을 가지고 있도록 링크 주위에 컨텍스트를 추가하십시오 무엇을 그게 왜 거기에 있는지. 대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 중요한 링크의 가장 중요한 부분을 항상 인용하십시오. – segarci