我的Spring Classes有问题。我需要在Configuration类中获取所有类型的Beans以将它们提供给另一个类。
现在的问题是,我不能这样做,除非我启动ApplicationContext
但这不起作用,因为我调用的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;
}
}
我可以使用任何功能或模式来获取这些豆吗?
答案 0 :(得分: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;
}
}
这种声明方法应该可以解决无限循环问题。
另请注意,您应该避免使用循环@Import
。只在一个方向上进行,如上例所示。
答案 1 :(得分:0)
你可以使用LazyInitTargetSource,除非必须在上下文初始化的两个bean上调用方法
(否则最好在可能的情况下删除循环依赖项)