gpt4 book ai didi

java - Spring BeanCurrentlyInCreationException

转载 作者:行者123 更新时间:2023-12-02 13:41:17 27 4
gpt4 key购买 nike

我有以下 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,我认为这是循环依赖的来源;然而,我的期望如下:

  1. 此配置类实例化 A 并将其添加到应用程序上下文
  2. MyInterface 的实现已成功注入(inject) bean A
  3. MyInterface 实现列表被注入(inject)到 MyConfig
  4. @PostConstruct 执行,在 bean A 上设置 myInterfaces

任何人都可以阐明我的哪些假设是不正确的吗?

最佳答案

您的代码中有循环依赖:请记住,MyConfig 也是一个 bean,因此需要实例化和 Autowiring 。为了创建它,需要注入(inject)所有可用的 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)
└─────┘

您有两个选择:

  • make public A a() { -> public static A a() { (因此不需要通过 的实例方法创建 bean A MyConfig);
  • 使 myInterfaces 成为 @Lazy 依赖项(以便仅在访问时才实际填充):例如

    @Autowired @Lazy
    private List<MyInterface> myInterfaces;

关于java - Spring BeanCurrentlyInCreationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com