MergedBeanDefinitionPostProcessor
MergedBeanDefinitionPostProcessor完成功能
1、快速获取bean的所有指定信息。
2、清理缓存中bean的指定信息。
MergedBeanDefinitionPostProcessor方法
postProcessMergedBeanDefinition
修改BeanDefinition信息
注意
1、此方法在bean生命周期中创建实例化对象后,赋值方法前执行。
2、此方法一般用于找到当前bean及其父类中所有信息。一般在AutowiredAnnotationBeanPostProcessor实现类中,找到当前bean及其父类中所有指定注解注释的属性、方法。
示例
CommonAnnotationBeanPostProcessor类中的
postProcessMergedBeanDefinition方法
// 在 BeanDefinition信息中的
// externallyManagedInitMethods 属性中添加 @PostConstruct注释方法
// externallyManagedDestroyMethods 属性中添加 @PreDestroy注释方法
@Override
public void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class<?> beanType, String beanName) {
super.postProcessMergedBeanDefinition(beanDefinition, beanType, beanName);
InjectionMetadata metadata = findResourceMetadata(beanName, beanType, null);
metadata.checkConfigMembers(beanDefinition);
}
resetBeanDefinition
注意
1、重置BeanDefinition信息,移除BeanPostProcessor中的缓存。
2、bean的生命周期中,没有找到调用此方法。在自动装配的核心类ConfigurationClassPostProcessor类中找到具体引用。
3、在AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor类中存在实现:移除获取过的bean的元数据缓存。
4、此方法有默认实现。附注释:
// 此BeanPostProcessor 清除缓存的元数据
// this post-processor should clear any metadata for the affected bean.
示例
@Override
public void resetBeanDefinition(String beanName) {
this.lookupMethodsChecked.remove(beanName);
this.injectionMetadataCache.remove(beanName);
}