使用案例
如果一个bean某些字段必须含有,则可以使用@Required注释
<bean id="" class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
</bean>
bean class定义
package com.javarticles.spring;
import org.springframework.beans.factory.annotation.Required;
public class Employee {
private String name;
private Company company;
private int age;
public String getName() {
return name;
}
@Required
public void setName(String name) {
this.name = name;
}
public Company getCompany() {
return company;
}
@Required
public void setCompany(Company company) {
this.company = company;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Employee(" + name + "), " + company;
}
}
如果一个bean不希望进行required检查
<bean id="dummy" class="com.javarticles.spring.Employee">
<meta
key="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor.skipRequiredCheck"
value="true" />
</bean>
原理
- 继承InstantiationAwareBeanPostProcessorAdapter,在postProcessPropertyValues()方法中进行校验
由于实现PriorityOrdered接口, Ordered.LOWEST_PRECEDENCE - 1,执行优先级比@Autowired、@Resource都要低
BeanPostProcessor具体实现类 处理注释 优先级(数字越低优先级越高) AutowiredAnnotationBeanPostProcessor @Autowoired Integer.MAX -2 CommonAnnotationBeanPostProcessor @Resource Integer.MAX -3 RequiredAnnotationBeanPostProcessor @Autowoired Integer.MAX -1
待续….