gpt4 book ai didi

java - bean 类中的属性值在构造函数中为 null

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:26 25 4
gpt4 key购买 nike

我正在尝试在我的服务实现类/bean 中使用我的 application.properties 文件中的值。但是当通过我的配置类初始化bean时,属性值都是空的。

配置类:

@Configuration
public class AppConfig {
@Bean AppServiceImpl appServiceImpl() {
return new AppServiceImpl();
}
}

服务类:

@Component
public class AppServiceImpl implements AppService {
@Value("${value.one}")
String value_one;

@Value("${value.two}")
String value_two;

@Value("${value.three}")
String value_three;

//values are null here
public AppServiceImpl() {
functionOne(value_one, value_two, value_three);
}
}

application.properties(在 src/main/resources 下):

value.one=1
value.two=2
value.three=3

做一些调试我可以看到 AppConfig 类已经找到了属性文件,如果我尝试声明 @Value("${value.one}") String value_one; 在那里它会显示它已按预期被赋予值 1

但是在我的 AppServiceImpl 类中,所有值都是空值。我在这里做错了什么?这应该如何在 Springboot 中正确完成?或者甚至只是 Spring。

谢谢。

最佳答案

如果您在构造函数中使用这些值,它们将不会立即可用。事实上,它们是在属性上注入(inject)的。这里发生的事情是在 spring 创建一个实例之后,它会更新属性值。

如果你想在构造函数中使用这些值,你应该使用构造函数注入(inject)。通过构造函数注入(inject)是最佳实践。

public class AppServiceImpl implements AppService {
String value_one;
String value_two;
String value_three;

//values are null here
public AppServiceImpl(String value1, String value2, String value3) {
value_one = value1;
value_two = value2;
value_three = value3;
functionOne(value_one, value_two, value_three);
}
}

还有你的配置类

@Configuration
public class AppConfig {
@Bean
AppServiceImpl appServiceImpl(@Value("${value.one}") String value1, @Value("${value.two}") String value2, @Value("${value.three}") String value3) {
return new AppServiceImpl(value1, value2, value3);
}
}

关于java - bean 类中的属性值在构造函数中为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50525053/

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