在BeanFactoryPostProcessor中,如何访问application.properties中的变量

时间:2019-08-01 07:45:32

标签: spring-boot

在spring-boot应用程序中,我在application.properties中定义了一个变量

env=staging

这是访问变量的类,但其值为null

@Configuration
public class BeanLifecycleConfiguration {

    @Value("${env}")
    private String env;

    @Bean
    public BeanFactoryPostProcessor changeCustomComponentsToLazyInit() {
        return beanFactory -> {
            System.out.println(env);
            // some logic
        };
    }
}

从注释中可以看到,System.out.println(env);返回null。 有没有办法获得env的值?

1 个答案:

答案 0 :(得分:1)

如果您将@Value("${env}") String env作为arg添加到bean构造函数方法中,它将起作用

@Bean
public BeanFactoryPostProcessor changeCustomComponentsToLazyInit(@Value("${env}") String env) {
    return beanFactory -> {
        System.out.println(env);
        // rest of the code
    };
}

这样做,您将强制Spring在创建$Value("${env}") bean之前处理BeanFactoryPostProcessor带注释的值的占位符逻辑。

在您的情况下,值是null,因为bean创建是在值插入之前进行的。