다른 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"클래스 모두에서 응용 프로그램 컨텍스트를 자동 배선하는 대신 위의 방법으로 제안했습니다. 건축가에 따르면 문맥은 매우 무겁고 모범 사례는 아닙니다.
빈 큐를 생성 할 때 실행주기 또는 호출 계층 구조는 어떻게됩니까? 위의 코드 작업을 이해하는 것이 도움이 될 것입니다.
링크 권장하지만, 동료 사용자가 어떤 생각을 가지고 있도록 링크 주위에 컨텍스트를 추가하십시오 무엇을 그게 왜 거기에 있는지. 대상 사이트에 도달 할 수 없거나 영구적으로 오프라인 상태가되는 경우 중요한 링크의 가장 중요한 부분을 항상 인용하십시오. – segarci