Spring@Required注解
在⽣产规模的应⽤程序中,IoC容器中可能会有数百或数千个bean,并且它们之间的依赖关系通常⾮常复杂。setter注⼊的⼀个缺点是你很难检查是否已经设置了所有必需的属性。使⽤“ dependency-check”属性<bean>可以检查属性值是否已设置,但⽆法检查其值是否设置为null或non-null值。
除了使⽤验证依赖项之外dependency-check,您还可以使⽤@Required注释来检查是否设置了值non-null。
如何使⽤@Required注释
1)在setter⽅法上使⽤@Required注释
@Required在类⽂件中使⽤bean属性的setter⽅法的注释如下:
EmployeeFactoryBean.java
public class EmployeeFactoryBean extends AbstractFactoryBean<Object>
{
private String designation;
public String getDesignation() {
return designation;
}
@Required
public void setDesignation(String designation) {spring ioc注解
this.designation = designation;
}
//more code here
}
2)注册RequiredNennotationBeanPostProcessor类
RequiredAnnotationBeanPostProcessor是⼀个spring bean post处理器,它检查是否@Required已设置带有注释的所有bean属性。要启⽤此Bean post处理器以进⾏属性检查,必须在Spring IoC容器中注册它。
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
演⽰
如果@Required尚未设置任何属性,则BeanInitializationException此bean后处理器将抛出a 。例如,如果我将创建⼀
个EmployeeFactoryBean类的实例⽽不传递属性值进⾏指定,那么我将得到此错误。
<bean id="manager"class="com.howtodoinjava.demo.factory.EmployeeFactoryBean">
<!-- <property name="designation" value="Manager" /> -->
</bean>
<bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
它会抛出错误。
Console
Caused by: org.springframework.beans.factory.BeanInitializationException: Property 'designation'is required for bean 'manager'
at
org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor.postProcessPropertyValues(RequiredAnnotation BeanPostProcessor.java:156)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory .java:1202)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactor y.java:537)
... 11more
要解决此问题,请通过取消注释l⽂件中的⾏来传递指定值。
通过这种⽅式,您可以使⽤@Required注释和RequiredAnnotationBeanPostProcessor类来验证在上下⽂初始化时,已正确设置了所有必需的bean属性。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。