Spring bean是否未被拾取?

问题描述 投票:0回答:1

我有一个带有以下服务的java spring项目:

@Slf4j
public class DialogFlowService {

    private String projectId;

   private  String sessionId;

    private String languageCode;


    public DialogFlowService(DialogFlowConfig dialogFlowConfig) {
        log.info("aaa" + dialogFlowConfig.languageCode);
        this.projectId = dialogFlowConfig.projectId;
        this.sessionId = dialogFlowConfig.sessionId;
        this.languageCode = dialogFlowConfig.languageCode;
    }
}

构造函数将以下类作为参数:

@Configuration
@ConfigurationProperties(prefix = "dialog-flow")
public class DialogFlowConfig {

    @NotNull
    public String projectId;

    @NotNull
    public String sessionId;

    @NotNull
    public String languageCode;
}

理论上,这应该由以下bean实例化:

   @Bean
    public DialogFlowService dialogFlowService() {
        return new DialogFlowService(new DialogFlowConfig());
    }

但是实际上,当我尝试记录构造函数参数之一时,它显示为null。我想念什么吗?

java spring javabeans
1个回答
0
投票

这类似于此处描述的内容:Why is my Spring @Autowired field null?

本质上,通过亲自实例化DialogFlowConfig实例并且不移交给Spring,您可以防止Spring对它进行后处理并注入ConfigurationProperties属性值。

相反,为@Bean创建一个DialogFlowConfig方法,并使用相应的Spring bean创建您的DialogFlowService。例如

@Bean
public DialogFlowService dialogFlowService(DialogFlowConfig dialogFlowConfig) {
    return new DialogFlowService(dialogFlowConfig);
}

@Bean
public DialogFlowConfig dialogFlowConfig() {
    return new DialogFlowConfig();
}

Spring将使用带有@Bean注释的dialogFlowConfig()工厂bean方法来实例化和处理相应的实例(设置其字段)。然后它将与dialogFlowService()工厂方法一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.