Spring-Bean后置处理器之CommonAnnotationBeanPostProcessor

发布时间 2023-12-20 09:04:29作者: 残城碎梦

本文帮你回答以下几个问题:

  1. @PostConstruct和@PreDestroy注解标注的方法是在什么阶段调用的?
  2. @Resource是如何完成属性自动注入的?
  3. @Resource相比@Autowired查找候选者的过程差异是什么?

类定义

类的作用

  1. 对@PostConstruct和@PreDestroy注解的处理,完成bean初始化前和销毁前的回调
  2. 对@Resource注解的处理,完成依赖字段的注入

类的结构

继承父类

InstantiationAwareBeanPostProcessor

提供了bean实例化前后对bean的操作以及在属性赋值前,传递属性值的postProcessProperties方法。

InitDestroyAnnotationBeanPostProcessor

继承了DestructionAwareBeanPostProcessor和MergedBeanDefinitionPostProcessor接口。

主要实现的方法有:postProcessMergedBeanDefinition、postProcessBeforeInitialization、postProcessBeforeDestruction、requiresDestruction。

MergedBeanDefinitionPostProcessor

用于处理合并后的BeanDefinition,在bean实例化后、属性赋值前回调。

DestructionAwareBeanPostProcessor

用于bean销毁前的回调。