【问题标题】:What is the use of RequiredAnnotationBeanPostProcessor in Spring framework?Spring框架中RequiredAnnotationBeanPostProcessor有什么用?
【发布时间】:2018-03-04 16:33:14
【问题描述】:

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

【问题讨论】:

标签: spring


【解决方案1】:

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


RequiredAnnotationBeanPostProcessor 是一个 BeanPostProcessor 实现。

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

RequiredAnnotationBeanPostProcessor 的情况下,它强制要求已配置所需的JavaBean 属性。
必需的 bean 属性通过 Java 5 注释检测:默认情况下,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 存在的动机是允许 开发人员使用注释自己类的 setter 属性 一个任意的 JDK 1.5 注释,表明容器必须 检查依赖注入值的配置。

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


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

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2012-02-01
    相关资源
    最近更新 更多