MyConfig(Spring Configurationファイル)がBeanのコンストラクタで参照されているプログラムの1つが、 MyConfig。 この種の設定についてはわかりません。私はこの種のコードで循環参照を見ることができますが、うまくいきますが、その流れを理解することはできません。どのように動作しています。以下は、そのコードのレプリカである - ここでBeanコンストラクタ内でJavaのコンフィグレーションリファレンスが構築されたクラスの他の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);
}
}
は私のキュークラスである -
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();
}
}
のように見えているので、私の質問は、ということです別の豆に豆を入れるのは正しい方法ですか? 戻りオブジェクトは実際にSpring Beanオブジェクトか単純なJavaクラスオブジェクトですか?
上記のコードで循環参照を参照できます。MyConfig内でQueueクラスのインスタンスが作成されるときに、MyConfigのインスタンス/参照が使用されます。 これは循環参照を作成しますか? My Architectは、Queueとクラス "C"の両方でアプリケーションコンテキストを自動配線する代わりに、上記のアプローチを提案しました。建築家によると、文脈は非常に重く、ベストプラクティスではありません。
Bean Queueの作成時に実行サイクルまたは呼び出し階層はどのようになりますか? 上記のコードの動作を理解することは非常に役に立ちます。
リンクが奨励されているのが、あなたの仲間のユーザーが何もいくつかのアイデアを持っていますので、リンク周りのコンテキストを追加してくださいそれはなぜそこにあるのですか?ターゲットサイトに到達できない場合や、永続的にオフラインになる場合は、常に重要なリンクの最も関連性の高い部分を引用してください。 – segarci