gpt4 book ai didi

java - 为什么在Spring的@Configuration中使用@Autowired有时会失败?

转载 作者:行者123 更新时间:2023-12-02 05:40:44 46 4
gpt4 key购买 nike

我正在使用 Spring Boot 和 thrift 服务器,并且我有两个 @Configuration 类和两个 bean 生成方法,代码如下:

@Configuration
public class EagleBeanCreator {

@Bean(destroyMethod = "destroy")
public EagleRestClient build() {
EagleRestClient client = new EagleRestClient();
// some set values code
return client;
}
}

还有一个:

@Configuration
public class EagleServiceBuilder {

@Autowired
private EagleRestClient eagleProxy;

@Bean
public EagleService eagleService() {
EagleService service = new EagleService();
System.out.println(eagleProxy);
service.setEagleProxy(eagleProxy);
return service;
}
}

但是当我运行 spring-boot:run 时,它会打印出 null for "System.out.println(eagleProxy);"为什么?

===========================更新====================== =======

我知道 setter 注入(inject)或构造函数注入(inject)有效。

最佳答案

您可能想尝试一下。

@Configuration
public class EagleServiceBuilder {

@Bean
public EagleService eagleService(EagleRestClient eagleProxy) {
EagleService service = new EagleService();
System.out.println(eagleProxy);
service.setEagleProxy(eagleProxy);
return service;
}
}

我的猜测是,您当前的实现方式并不表明 EagleServiceEagleRestClient 之间存在依赖关系。因此,您当前的实现会导致两个 bean 之间的初始化顺序随机。修改后的版本告诉 Spring“嘿,我的 EagleService 依赖于 EagleRestClient。请在 EagleService 之前初始化 EagleRestClient

关于java - 为什么在Spring的@Configuration中使用@Autowired有时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56140908/

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