finishBeanFactoryInitialization方法逐句分析

本文是Spring系列文章的一部分。其他相关文章见

Spring系列文章导航

本文逐句分析finishBeanFactoryInitialization方法。


前言

为啥要先分析这个方法,是因为这几天还在看HuTool的源码,路小磊在B站有个课程讲HuTool的,其中有一课可认真的在讲转换器这一章,但是我对这部分理解不深,这里先占个位,后边我再研究一下转换器,再补充一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、为我们的bean工厂创建类型转化器 Convert

转换器用于注入属性时,将值转为对应类型。

		if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&
				beanFactory.isTypeMatch(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class)) {
			beanFactory.setConversionService(
					beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));
		}

二、解析配置文件中属性

${} 这种符号的值是配置在配置文件中的,第二部分就是解析并填入值

if (!beanFactory.hasEmbeddedValueResolver()) {
	beanFactory.addEmbeddedValueResolver(strVal -> getEnvironment().resolvePlaceholders(strVal));
}

使用方法

public class MainConfig implements EmbeddedValueResolverAware{

	public void setEmbeddedValueResolver(StringValueResolver resolver) {
		this.jdbcUrl = resolver.resolveStringValue("${ds.jdbcUrl}");
		this.classDriver = resolver.resolveStringValue("${ds.classDriver}");
	}
}

三、处理关于aspectj

weaver很熟悉吧,就是aop的织入

		String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false);
		for (String weaverAwareName : weaverAwareNames) {
			getBean(weaverAwareName);
		}

四、停止使用临时类加载器

beanFactory.setTempClassLoader(null);

五、冻结所有的 bean 定义

冻结所有的 bean 定义 , 说明注册的 bean 定义将不被修改或任何进一步的处理

beanFactory.freezeConfiguration();

三、实例化剩余的单实例bean

beanFactory.preInstantiateSingletons();

总结

这部分不需要跟的太深,了解就好,需要串成主线的会有对应博文的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值