栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

finishBeanFactoryInitialization方法逐句分析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

finishBeanFactoryInitialization方法逐句分析

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

Spring系列文章导航

本文逐句分析finishBeanFactoryInitialization方法。

文章目录
  • 前言
  • 一、为我们的bean工厂创建类型转化器 Convert
  • 二、解析配置文件中属性
  • 三、处理关于aspectj
  • 四、停止使用临时类加载器
  • 五、冻结所有的 bean 定义
  • 三、实例化剩余的单实例bean
  • 总结


前言

为啥要先分析这个方法,是因为这几天还在看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();

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/922022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号