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 的使用与非常具体的极端情况有关。这就是为什么你可能找不到很多关于它的例子。