我有以下java配置类:
@Configuration
public class MyConfig {
@Autowired
private List<MyInterface> myInterfaces;
@Bean
public A a() {
return new A();
}
@PostConstruct
public void postConstruct() {
a().setProperty(myInterfaces);
}
}
每个MyInterface实现都依赖于bean A,我假设这是这个循环依赖的来源;然而,我的期望如下:
任何人都可以了解我的哪些假设不正确?
答案 0 :(得分:1)
您的代码中存在循环依赖关系:请记住MyConfig
也是一个bean,因此需要实例化并自动连接。为了创建它,需要注入所有可用的MyInterface
个实例,其中一个实例需要bean A
,它由MyConfig
的实例方法创建,依此类推。
如果您要在Spring Boot 1.4+中运行,您将获得此输出:
***************************
APPLICATION FAILED TO START
***************************
Description:
The dependencies of some of the beans in the application context form a cycle:
┌─────┐
| interfaceImpl defined in file [/.../InterfaceImpl.class]
↑ ↓
| myConfig (field private java.util.List demo.MyConfig.myInterfaces)
└─────┘
您有两种选择:
public A a() {
- &gt; public static A a() {
(因此不需要通过MyConfig
的实例方法创建bean A; 使myInterfaces
成为@Lazy
依赖项(因此实际上只有在访问时才填充):例如:
@Autowired @Lazy
private List<MyInterface> myInterfaces;