我试图在我的服务实现类/ bean中使用application.properties文件中的值。但是当通过我的config类初始化bean时,属性值都为null。
配置类:
@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类中,所有值都为null。我在这做错了什么?如何在Springboot中正确完成?或者只是春天。
感谢。
答案 0 :(得分:4)
如果您使用构造函数中的值,它们将无法立即使用。实际上,他们注入属性。这里发生的是在spring创建一个实例后,它将更新属性值。
如果要在构造函数中使用这些值,则应使用构造函数注入。构造函数注入是最佳实践。
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);
}
}
答案 1 :(得分:3)
在创建实例后,将注入这些值。所以它们在构造函数中是null
。
要在注入值后执行方法,请使用@javax.annotation.PostConstruct
:
@PostConstruct
public void init(){ // method name doesn't matter
functionOne(value_one, value_two, value_three);
}