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

Spring源码分析(六)启动过程分析

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

Spring源码分析(六)启动过程分析

查看我的其他Spring源码分析文章

https://blog.csdn.net/caicongyang/category_2139981.html?spm=1001.2014.3001.5482

1. this() 方法

a.构建DefaultListableBeanFactory、AnnotatedBeanDefinitionReader、ClassPathBeanDefinitionScanner

b. 在构建AnnotatedBeanDefinitionReader过程中往BeanDefinitionRegistry提前注册相关的BeanFactoryProcess

源码见org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors(org.springframework.beans.factory.support.BeanDefinitionRegistry, java.lang.Object)

提前往里注册BeanDefinition:

ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
internalPersistenceAnnotationProcessor
DefaultEventListenerFactory
EventListenerMethodProcessor
2.register(componentClasses)方法

往BeanDefinitionRegistry注册配置类

3.refresh() 方法 a.prepareRefresh(): 启动时间等,设置配置信息到Environment中 b.obtainFreshBeanFactory(): 判断是否刷新容器等额 c.prepareBeanFactory(beanFactory):

提完往beanfactory里添加ApplicationContextAwareProcessor/ApplicationListenerDetector两个bean

添加resolvableDependencies:在byType进行依赖注入时,会先从这个属性中根据类型 找bean

简单理解为提前先注入这个bean;

	// BeanFactory interface not registered as resolvable type in a plain factory.
		// MessageSource registered (and found for autowiring) as a bean.
		beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);
		beanFactory.registerResolvableDependency(ResourceLoader.class, this);
		beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
		beanFactory.registerResolvableDependency(ApplicationContext.class, this);
d.invokeBeanFactoryPostProcessors(beanFactory) 方法
​​​​​​

执行BeanFactoryPostProcessor,重点是前面放进去的ConfigurationClassPostProcessor这个beanFactoryPostProcessor去递归解析包含@Component @Bean @import @importSource类的解析,扫描生生产所有的BeanDefinition; 

核心类是:

org.springframework.context.annotation.ConfigurationClassPostProcessor#processConfigBeanDefinitions

e.registerBeanPostProcessors(beanFactory)方法
将扫描到的BeanPostProcessors实例化并排序,并添加到BeanFactory的beanPostProcessors属性中去
f.initMessageSource()方法
设置ApplicationContext的MessageSource,
g.initApplicationEventMulticaster();

发布广播

h.registerListeners();

注册监听器

i.finishBeanFactoryInitialization(beanFactory);

初始化单例方法

j.finishRefresh();

发布一些生命周期的事件等等

 

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

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

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