当前位置: 首页 > 知识库问答 >
问题:

Spring bean后处理器:注入一个值

罗凯
2023-03-14

我有一个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 be BeanPostProcessor 有关。
有没有办法以某种方式注入值?我正在使用 Spring Boot 2.2.0。

共有1个答案

暨弘毅
2023-03-14

这是有意的。参见文档了解@Value

请注意,@Value注解的实际处理是由BeanPostCPU执行的,这反过来意味着您不能在BeanPostCPU或BeanFactoryPost处理器类型中使用@Value。请查阅javadoc以获取AutowiredAnNotationBeanPost处理器类(默认情况下,该类检查此注解的存在)。

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

 类似资料:
  • 问题内容: 我正在使用一个已定义的拦截器,我想从拦截器中通过DAO层进行db调用,所以我如何将Spring bean注入到struts拦截器中。是否可以将spring bean注入到struts拦截器中,任何人都可以提出任何想法在此。 问题答案: 编辑 由于不需要将拦截器声明为Spring bean,因此删除了不必要的部分。感谢@AleksandrM对其进行测试。 就像使用Actions一样,(如

  • CompositeItemWriter:当我需要将项目平均地分给Writer时,似乎会将所有读取的项目传递给所有的Writer。 BacktoBackPatternClassifier:我并不真正需要分类器,因为我是均匀地拆分项目。 有没有另一种方式,让一个读者和多个作者? 或者我可以在Writer中手动创建线程?

  • 需要注释处理器的帮助。我创建了一个简单的注释处理器,它使用@autoservice注释来检查注释的字段是否为最终字段。但它没有显示任何编译时错误。这是我的配置 注释: 注释处理器: pom文件: 测试文件:

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 我在编译使用我的注释处理器的代码时收到以下错误: 关于如何调试这个有什么提示吗?错误输出根本没有用处。有没有办法得到更详细的错误?

  • 我有下面的映射器类,我想在其中使用。我正在尝试构造函数注入,但不起作用,并且正在打印。 mapStruct实现类 如果我使用使用字段注入,这样它就可以正常工作。这意味着Spring不支持类的构造函数注入。是因为类不能直接实例化,需要子类来实例化吗? 有没有什么方法可以在实现类中创建一个构造函数,如下所示: 这样,构造函数注入应该可以工作。