spring注释一 : RequiredAnnotationBeanPostProcessor

来源:互联网 发布:淘宝懒人鞋 编辑:程序博客网 时间:2024/05/13 07:49

使用案例

如果一个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

待续….

0 0