1

春のクラスに問題があります。別のクラスに渡すために、Configurationクラス内のタイプのすべてのBeanを取得する必要があります。

問題は、起動しない限りそれApplicationContextができないということですが、それは機能しません。呼び出しているConfigクラスは、呼び出し元のconfigクラスを使用しているため、無限のループが発生します...

例として:

@Configuration
@Import(Calling.class)
public class MyConfig{
@Bean
public ExampleClass aBean(){
...
return aObject;
}
}

@Configuration
@Import(MyConfig.class)
public class Calling{

@Bean
public Foo anotherBean(){
ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext(myConfig.class);
ctx.getBeansOfType(ExampleClass.class);
return aObject;
}
}

これらのBeanを取得するために使用できる機能またはパターンはありますか?

4

2 に答える 2

3

では@Configuration、これらの無限ループが頻繁に発生するため、コンテキストから Bean を「プル」しないように十分に注意する必要があります。

代わりにこれを試してください:

@Configuration
@Import(Calling.class)
public class MyConfig {
   @Bean
   public ExampleClass aBean() {
      ...
      return aObject;
   }
}

@Configuration
public class Calling {

   private @Autowired List<ExampleClass> exampleBeans;

   @Bean
   public Foo anotherBean() {
      return aObject;
   }
}

この宣言型アプローチは、うまくいけば無限ループの問題を回避するはずです。

また、 cyclic を避ける必要があることに注意してください@Import。上記の例のように、一方向にのみ実行します。

于 2011-11-27T21:33:28.427 に答える
0

コンテキストの初期化時に両方の Bean でメソッドを呼び出す必要がない限り、LazyInitTargetSource を使用できます

http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/aop/target/LazyInitTargetSource.html

(それ以外の場合は、可能であれば循環依存を削除するのが最善です)

于 2011-11-27T22:55:05.383 に答える