我有一个BeanPostProcessor bean,我想注入两个字符串变量,它们的值来自application.properties文件。但是,它们不会被注入并留有占位符的值。

@Component
public class MyBeanPostProcessor implements BeanPostProcessor {

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

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

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        ...
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
       ...
       return bean;
    }
}


在这两种方法中,变量的值均为${property1}${property2}
我已经尝试将它们注入常规bean中,并且效果很好,所以它肯定与bean BeanPostProcessor有关。
有办法以某种方式注入价值吗?我正在使用Spring Boot 2.2.0。

最佳答案

是故意的请参见docs中的@Value


  请注意,@ Value批注的实际处理是由BeanPostProcessor执行的,这反过来意味着您不能在BeanPostProcessor或BeanFactoryPostProcessor类型中使用@Value。请查阅javadoc中的AutowiredAnnotationBeanPostProcessor类(默认情况下,该类检查此注释的存在)。


作为一种解决方法,例如,您可以在标记为@Configuration的类中手动将后处理器创建为bean,然后从那里将此值作为构造函数参数传递。

08-07 00:01