Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBean后处理器:注入一个值_Java_Spring_Spring Boot - Fatal编程技术网

Java SpringBean后处理器:注入一个值

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}")

我有一个BeanPostProcessorbean,我想用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。

这是我想要的。有关
@值的信息,请参见:

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


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

您是否尝试将它们注入到另一个类中,然后使该类成为
BeanPostProcessor
的依赖项?可能是spring在检索
@Value
之前创建了bean后处理器。然而,有一个解决办法——我为这些道具制作了一个@ConfigurationProperties bean,它用已经填充的值自动连接到bpp bean。谢谢你的提示!谢谢我在问题的评论中也提出了一个解决方法。是的,用
@ConfigurationProperties
代替
@Value
,这也是可能的(而且,在我看来,更优雅一些),我试过了,但不起作用。属性值仍然为
null
。有效的方法是: