小编典典

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

spring-boot

我正在尝试使用服务实现类/
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中正确完成此操作?甚至只是春天。

谢谢。


阅读 353

收藏
2020-05-30

共1个答案

小编典典

如果您在构造函数中使用这些值,则将无法立即使用它们。实际上,它们是基于属性注入的。这里发生的事情是在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);
    }
}
2020-05-30