Spring框架中RequiredAnnotationBeanPostProcessor的用途是什么?

问题描述 投票:3回答:1

我是Spring框架的初学者。我已经开始学习Spring框架几周了。我没有得到RequiredAnnotationBeanPostProcessor的任何正确解释。请有人帮我提供一些RequiredAnnotationBeanPostProcessor的例子以及在哪里使用它。提前致谢。

spring
1个回答
3
投票

RequiredAnnotationBeanPostProcessor是使用Spring的应用程序中不常用的注释。 提供自动装配和要求(默认启用)行为的@Autowired注释通常是首选。


RequiredAnnotationBeanPostProcessorBeanPostProcessor实施。

BeanPostProcessor接口定义了您可以实现的回调方法,以提供您自己的(或覆盖容器的默认)实例化逻辑,依赖关系解析逻辑等。

对于RequiredAnnotationBeanPostProcessor,它强制配置所需的JavaBean属性。 通过Java 5注释检测所需的bean属性:默认情况下,Spring的Required注释。

简而言之,它允许确保声明“必需”属性的bean实际上已配置了值。请注意,该值可能是null

例如假设这个模型类:

public class Foo {

    private Bar bar;

     @Required
     public void setBar(Bar bar) {
        this.bar = bar;
    }
}

如果在bean的初始化期间从不调用setBar(),则抛出org.springframework.beans.factory.BeanInitializationException

例如,这个bean配置将触发异常抛出:

@Configuration
public class MyConfig {

    @Bean
    public Foo getFoo() {
        return new Foo();
    }
}

当然,如果你将@Autowired添加到具有可解析依赖关系的setBar(),它会没问题:

public class Foo {

    private Bar bar;

    @Autowired
    @Required
    public void setBar(Bar bar) {
        this.bar = bar;
    }
}

因此,我们可以认为RequiredAnnotationBeanPostProcessor的一个很好的用例是你不希望/不能在bean的类中指定自动装配的情况。

另请注意,RequiredAnnotationBeanPostProcessor还提供了一个额外的功能,根据javadoc的主要目标:

存在此BeanPostProcessor的动机是允许开发人员使用任意JDK 1.5注释来注释其自己的类的setter属性,以指示容器必须检查依赖注入值的配置。

这意味着您可以指定另一个注释@Required来指示所需的约束。 RequiredAnnotationBeanPostProcessor确实定义了一个setRequiredAnnotationType()方法,您可以覆盖该方法来设置要使用的注释。


正如您所看到的,RequiredAnnotationBeanPostProcessor的使用与非常具体的极端情况有关。这就是为什么你可能找不到很多关于它的例子。

© www.soinside.com 2019 - 2024. All rights reserved.