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

时间:2018-05-25 08:44:02

标签: java spring 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中正确完成?或者只是春天。

感谢。

2 个答案:

答案 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);
}