1

我的春季课程有问题。我需要在 Configuration 类中获取所有类型的 Bean 以将它们提供给另一个类。

现在的问题是,除非我启动 aApplicationContext但那不起作用,否则我不能这样做,因为我调用的 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

您可以使用 LazyInitTargetSource 除非在上下文初始化时必须在两个 bean 上调用方法

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

(否则最好尽可能删除循环依赖)

于 2011-11-27T22:55:05.383 回答