Skip to main content

BeanPostProcessor相关接口执行的方法

1. BeanPostProcessor相关接口

  • InstantiationAwareBeanPostProcessor
  • DestructionAwareBeanPostProcessor
  • MergedBeanDefinitionPostProcessor
  • SmartInstantiationAwareBeanPostProcessor

四个继承接口加上 BeanPostProcessor 一共五个接口。看一下这五个接口的方法:

public interface BeanPostProcessor {
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}

}

InstantiationAwareBeanPostProcessorDestructionAwareBeanPostProcessorMergedBeanDefinitionPostProcessor 继承了 BeanPostProcessor

public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
@Nullable
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
//@since 5.1
@Nullable
default PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)
throws BeansException {

return null;
}
}
public interface DestructionAwareBeanPostProcessor extends BeanPostProcessor {
void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;

default boolean requiresDestruction(Object bean) {
return true;
}
}
public interface MergedBeanDefinitionPostProcessor extends BeanPostProcessor {
void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName);

default void resetBeanDefinition(String beanName) {
}
}

SmartInstantiationAwareBeanPostProcessor 继承了 InstantiationAwareBeanPostProcessor 接口。

public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {
@Nullable
default Class<?> predictBeanType(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
@Nullable
default Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, String beanName)
throws BeansException {

return null;
}
default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {
return bean;
}
}

2. BeanPostProcessor相关接口执行顺序

  1. InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
  2. MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
  3. SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
  4. InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
  5. InstantiationAwareBeanPostProcessor#postProcessProperties
  6. BeanPostProcessor#postProcessBeforeInitialization
  7. BeanPostProcessor#postProcessAfterInitialization
  8. DestructionAwareBeanPostProcessor#requiresDestruction
  9. DestructionAwareBeanPostProcessor#postProcessBeforeDestruction