> 技术文档 > Spring之【Bean后置处理器】

Spring之【Bean后置处理器】

目录

BeanPostProcessor

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

MergedBeanDefinitionPostProcessor

SmartInstantiationAwareBeanPostProcessor

DestructionAwareBeanPostProcessor

AutowiredAnnotationBeanPostProcessor

CommonAnnotationBeanPostProcessor 


BeanPostProcessor

  • Spring提供的扩展点
  • 提供了两个默认方法,将bean对象和beanName作为参数
  • Spring会在合适的时机执行对应的方法逻辑
package org.springframework.beans.factory.config;import org.springframework.beans.BeansException;import org.springframework.lang.Nullable;public interface BeanPostProcessor { // bean初始化前@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;} // bean初始化后@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}}

BeanPostProcessor的子接口

InstantiationAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { // bean实例化前@Nullabledefault Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException {return null;} // bean实例化后default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {return true;} @Nullabledefault PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)throws BeansException {return null;}}

MergedBeanDefinitionPostProcessor

package org.springframework.beans.factory.support;public interface MergedBeanDefinitionPostProcessor extends BeanPostProcessor {void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class beanType, String beanName);default void resetBeanDefinition(String beanName) {}}

SmartInstantiationAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {@Nullabledefault Class predictBeanType(Class beanClass, String beanName) throws BeansException {return null;}@Nullabledefault Constructor[] determineCandidateConstructors(Class beanClass, String beanName)throws BeansException {return null;}default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {return bean;}}

DestructionAwareBeanPostProcessor

package org.springframework.beans.factory.config;public interface DestructionAwareBeanPostProcessor extends BeanPostProcessor {void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;default boolean requiresDestruction(Object bean) {return true;}}

AutowiredAnnotationBeanPostProcessor

  • 将该BeanPostProcessor对应的BeanDefinition存到容器中,也就是DefaultListableBeanFactory中的beanDefinitionMap集合中

  •  AbstractApplicationContext中refresh方法的registerBeanPostProcessors步骤中实例化并初始化好AutowiredAnnotationBeanPostProcessor对象,放入AbstractBeanfactory中的beanPostProcessors集合中

  •  解析@Autowired、@Value注解

CommonAnnotationBeanPostProcessor 

  • 将该BeanPostProcessor对应的BeanDefinition存到容器中,也就是DefaultListableBeanFactory中的beanDefinitionMap集合中

  •  AbstractApplicationContext中refresh方法的registerBeanPostProcessors步骤中实例化并初始化好AutowiredAnnotationBeanPostProcessor对象,放入AbstractBeanfactory中的beanPostProcessors集合中

  • 解析@Resource、@PostContruct、@PreDestroy