目录
InstantiationAwareBeanPostProcessor
MergedBeanDefinitionPostProcessor
SmartInstantiationAwareBeanPostProcessor
DestructionAwareBeanPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
BeanPostProcessor
- Spring提供的扩展点
- 提供了两个默认方法,将bean对象和beanName作为参数
- Spring会在合适的时机执行对应的方法逻辑
java
package org.springframework.beans.factory.config;
import org.springframework.beans.BeansException;
import org.springframework.lang.Nullable;
public interface BeanPostProcessor {
// bean初始化前
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
// bean初始化后
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
}
BeanPostProcessor的子接口
InstantiationAwareBeanPostProcessor
java
package org.springframework.beans.factory.config;
public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {
// bean实例化前
@Nullable
default Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
return null;
}
// bean实例化后
default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
return true;
}
@Nullable
default PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)
throws BeansException {
return null;
}
}
MergedBeanDefinitionPostProcessor
java
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
java
package org.springframework.beans.factory.config;
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;
}
}
DestructionAwareBeanPostProcessor
java
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

