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);
	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值