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;
}
}
InstantiationAwareBeanPostProcessor 、 DestructionAwareBeanPostProcessor、 MergedBeanDefinitionPostProcessor 继承了 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相关接口执行顺序
- InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation
- MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition
- SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference
- InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
- InstantiationAwareBeanPostProcessor#postProcessProperties
- BeanPostProcessor#postProcessBeforeInitialization
- BeanPostProcessor#postProcessAfterInitialization
- DestructionAwareBeanPostProcessor#requiresDestruction
- DestructionAwareBeanPostProcessor#postProcessBeforeDestruction