解析@Resource和@Inject@PostConstruct@PreDestroy


@Resource和@Inject是通过BeanPostProcessor接口的实现类CommonAnnotationBeanPostProcessor来实现的,顾名思义即公共注解CommonAnotation,CommonAnnotationBeanPostProcessor是Spring中统一处理JDK中定义的注解的一个BeanPostProcessor。该类会处理的注解还包括@PostConstruct,@PreDestroy等。

| /*

  • 1、扫描类里面的属性或者方法
  • 2、判断属性或者方法上面是否有@PostConstruct @PreDestroy @Resource注解
  • 3、如果有注解的属性或者方法,包装成一个类
  • /
    @Override
    public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {

    //扫描@PostConstruct @PreDestroy
    super.postProcessMergedBeanDefinition(beanDefinition, beanType, beanName);
    //扫描@Resource,扫描属性和方法上面是否有@Resource注解,如果有则收集起来封装成对象
    InjectionMetadata metadata = findResourceMetadata(beanName, beanType, null);
    metadata.checkConfigMembers(beanDefinition);
    *}
    | | —- |