Я видел одну из программ, в которых MyConfig (файл конфигурации Spring) ссылается на конструктор одного из компонентов, чтобы получить другой компонент, определенный в MyConfig. Я не уверен в такой конфигурации. Я вижу циклическую ссылку в этом виде кода, хотя он работает нормально, но я не могу понять поток. Как это работает. Ниже приводится копия этого кода -Ссылка на Spring Java Config в bean-конструкторе для получения другого компонента в построенном классе
@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);
}
}
Вот мой класс Queue -
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();
}
}
Так что мой вопрос заключается в том, что это правильный способ получить фасоль в другой фасоли? Будет ли объект возврата действительно объектом весового компонента или просто классом класса java?
Я вижу циклическую ссылку в приведенном выше коде. Когда экземпляр класса Queue будет создан внутри MyConfig, вы получите экземпляр/ссылку MyConfig. Будет ли это создавать циклические ссылки? Мой Архитектор предложил мне подход выше, а не autoWiring Контекст приложения в обоих классах Queue и class «C». По архитектурному контексту очень тяжелый, и это не лучшая практика.
Каким будет цикл выполнения или иерархия вызовов, когда bean Queue создается? Было бы очень полезно понять работу над кодом.
ссылки на внешние ресурсы, рекомендуется, но, пожалуйста, добавить контекст вокруг ссылки, так что ваши коллеги пользователи будут иметь некоторое представление о том, что это есть и почему он есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. – segarci