我有一个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,然后从那里将此值作为构造函数参数传递。