Java SpringBean后处理器:注入一个值
我有一个BeanPostProcessorbean,我想用application.properties文件中的值注入两个字符串变量。但是,它们不会被注入,并留下占位符的值Java SpringBean后处理器:注入一个值,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个BeanPostProcessorbean,我想用application.properties文件中的值注入两个字符串变量。但是,它们不会被注入,并留下占位符的值 @Component public class MyBeanPostProcessor implements BeanPostProcessor { @Value("${property1}") private String property1; @Value("${property2}")
@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。这是我想要的。有关
@值的信息,请参见:
请注意,@Value注释的实际处理由BeanPostProcessor执行,这意味着您不能在BeanPostProcessor或BeanFactoryPostProcessor类型中使用@Value。请查阅javadoc以了解AutowiredAnnotationBeanPostProcessor类(默认情况下,该类会检查是否存在此注释)
作为一种解决方法,例如,您可以在标记为@Configuration
的类中手动创建后处理器作为bean,并将该值作为构造函数参数传递给该类。您是否尝试将它们注入到另一个类中,然后使该类成为BeanPostProcessor
的依赖项?可能是spring在检索@Value
之前创建了bean后处理器。然而,有一个解决办法——我为这些道具制作了一个@ConfigurationProperties bean,它用已经填充的值自动连接到bpp bean。谢谢你的提示!谢谢我在问题的评论中也提出了一个解决方法。是的,用@ConfigurationProperties
代替@Value
,这也是可能的(而且,在我看来,更优雅一些),我试过了,但不起作用。属性值仍然为null
。有效的方法是: