spring的上下文执行流程(refresh()底层原理及bean扫描流程)

7 篇文章 0 订阅
订阅专栏
2 篇文章 0 订阅
订阅专栏

以AnnotationConfigApplicationContext为例子:

1、this

a.在调用AnnotationConfigApplicationContext的构造方法之前,会调用父类GenericApplicationContext的无参构造方法,会构造一个BeanFactory,为DefaultListableBeanFactory。

b.new AnnotatedBeanDefinitionReader,(主要为了添加一些基础的PostProcessor,同时通过reader进行BeanDefinition的注册,同时对BeanFactory设置和添加PostProcessor(后置处理器))

c.new ClassPathBeanDefinitionScanner,主要作用可以用来扫描得到并注册BeanDefinition(可参考 bean扫描流程图 很详细了,在下面)

2、register

使用第一步中的reader注册AppConfig为BeanDefinition,类型为AnnotatedGenericBeanDefinition

3、refresh

a.prepareRefresh(),主要作用记录启动时间,并且可以允许子容器设置一些内容到Environment中,验证Environment中是否包括了必须要有的属性

b.obtainFreshBeanFactory(),进行BeanFactory的refresh,最终调用子类的方法产生一个BeanFactory

c.prepareBeanFactory(beanFactory),为beanFactory设置一些属性,比如设置表达式解析器、后置处理器、ResolvableDependency、DependencyInterface等等

d.postProcessBeanFactory为了给子类提供扩展(子类可以继续向beanFactory中添加东西)

e.invokeBeanFactoryPostProcessors(beanFactory),拿到context中所有的beanFactoryPostProcessors,执行BeanFactoryPostProcessor(这一步是spring中的一个重点),到此BeanDefinition就注册到BeanFactory了

f.registerBeanPostProcessors,注册一些程序员自己写的bean处理器

g、initMessageSource():假如BeanFactory中有"messageSource"的BeanDefinition,那么就会把这个Bean对象创建出来并赋值给ApplicationContext的messageSource属性,让ApplicationContext拥有国际化的功能

h.initApplicationEventMulticaster():如果BeanFactory中有"applicationEventMulticaster"的BeanDefinition,那么就会把这个Bean对象创建出来并赋值给ApplicationContext的applicationEventMulticaster属性,让ApplicationContext拥有事件发布的功能

i.onRefresh():提供给AbstractApplicationContext的子类进行扩展(springboot中用来启动内置tomcat)

j. registerListeners():从BeanFactory中获取ApplicationListener类型的beanName,然后添加到ApplicationContext中的事件广播器
applicationEventMulticaster中去,到这一步因为FactoryBean还没有调用getObject()方法生成Bean对象,所以这里要在根据类型找一下ApplicationListener,记录一下对应的beanName.

k.
finishBeanFactoryInitialization(beanFactory):完成BeanFactory的初始化,主要就是实例化非懒加载的单例Bean。

l. finishRefresh():BeanFactory的初始化完(设置ApplicationContext的lifecycleProcessor、调用lifecycleProcessor的onRefresh()方法,然后调用它的start()方法,这一步必须是是DefaultLifecycleProcessor才调用,这就是ApplicationContext的生命周期扩展机制、发布ContextRefreshedEvent事件)

                                                                 上下文执行流程图1

                                                                 上下文执行流程图2

                                                               bean扫描流程图

                 

 

SpringBoot源码分析之Spring上下文refresh(重点)
Bob_666的博客
03-28 3884
refresh首先来看SpringApplication#run方法中refresh()方法private void refreshContext(ConfigurableApplicationContext context) { refresh(context); if (this.registerShutdownHook) { try { context.register...
Spring源码分析之从refresh方法分析Spring的IoC原理
MOKE_SPACE
09-14 3072
我们先来看看 refresh() 的官方描述: public void refresh() throws BeansException, IllegalStateException { synchronized(this.startupShutdownMonitor) { this.prepareRefresh(); Con...
Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)
vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计
02-04 2840
refresh(prepareRefresh、obtainFreshBeanFactory、prepareBeanFactory、postProcessBeanFactory、invokeBeanFactoryPostProcessors)核心方法分析,文章内容有点长,可以分目录节点进行阅读,比较想深入理解的方法可以点击文章目录入口.
SpringCloud 详解配置刷新的原理
热门推荐
believer123的专栏
11-01 2万+
首先先介绍下实现后的效果: 1、在需要动态配置属性的类上添加注解@RefreshScope表示此类Scope为refresh类型的 2、启动工程,修改config-server对应的配置文件,这里修改的是system.order.serverName 3、以post的方式调用refresh接口,返回修改后的key值 4、访问infoTest接口,可以看到修改后的值详细流程:依次启动confi
spring框架加载完成后执行上下文刷新事件(ContextRefreshedEvent)
jackson87的博客
07-19 416
目前spring框架是j2ee比较常用的项目开发技术,只需在web.xml文件中进行少许配置即可,代码如下所示:<!--spring的配置文件--><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:config/appl...
Spring上下文执行流程解析
"对Spring上下文执行流程的分析主要集中在`ClassPathXmlApplicationContext`的创建以及`refresh()`方法的调用,这个过程涉及到Spring容器的初始化、配置加载和bean的实例化。" 在Spring框架中,`...
Spring 源码阅读:基于 XML 配置初始化 Spring 上下文过程总结(10+详细流程图)
java_lujj的博客
09-07 550
最近一直在看 Spring 框架的源码,并且写了一系列文章记录学习的收获,目前主要分析了 Spring 上下文的初始化和 Bean 初始化的一部分源码。对 Spring 源码的阅读,可以让我更加了解一直在使用的 Spring 框架,也能让我从其中学到很多开发的技巧,比如设计模式的实践等。随着对 Spring 源码的不断了解,对一些最开始学习到的东西,有了新的认识。因此,在继续学习之前,我打算把前面看过以及记录过的东西,做一个整体回顾。
Spring Bean创建初始化流程.docx
03-04
开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),这些类带有@Configuration注解,用于定义Bean的配置。 2. **刷新上下文**: 调用`...
Spring 源码阅读 29:基于 XML 配置初始化 Spring 上下文过程总结(10+详细流程图)
m0_67698950的博客
09-07 288
最近一直在看 Spring 框架的源码,并且写了一系列文章记录学习的收获,目前主要分析了 Spring 上下文的初始化和 Bean 初始化的一部分源码,文章收录在【Spring Framework 源码解读】专栏中。对 Spring 源码的阅读,可以让我更加了解一直在使用的 Spring 框架,也能让我从其中学到很多开发的技巧,比如设计模式的实践等。随着对 Spring 源码的不断了解,对一些最开始学习到的东西,有了新的认识。因此,在继续学习之前,我打算把前面看过以及记录过的东西,做一个整体回顾。
Spring教程之refresh()执行逻辑浅析
09-07
Spring框架中,`refresh()`方法是启动和更新Spring应用程序上下文的关键步骤。这个方法主要分为以下几个阶段: 1. **准备预处理(prepareRefresh())**: 在这一阶段,Spring容器会记录启动时间、标记容器为活动...
基于spring的多线程上下文处理服务,源码
01-05
Maven项目,可直接编译通过,已经有一个测试的数据读取 和一个测试的数据处理,运行类--org.jedidiah.spring.process.common.ProcessWorkStarter; 全spring配置,处理服务线程池线程数自定义; 上下文读取器配置添加至readerPool.readers; 上下文处理器配置添加至serviceProcessors.services; 分析链线程数配置serviceProcessors.threadCount;
Spring IoC原理(二) refresh()方法
shuishui的博客
07-14 347
对于IoC容器启动来说,refresh是十分重要的方法。该方法在抽象类AbstractApplication中,在该方法中详细的描述了整个ApplicationContext的初始化过程,同时作为Spring中的具体ApplicationContext的基类,为Bean的生命周期管理提供了条件。...
spring容器创建过程(总结版)
大叶子不小的博客
09-09 783
Spring容器的refresh()【创建刷新】; 1、prepareRefresh()刷新前的预处理; 1)、initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法; 2)、getEnvironment().validateRequiredProperties();检验属性的合法等 3)、earlyApplicationEvents= new LinkedHashSet();保存容器中的一些早期的事件; 2、obtainFreshBeanFactory();获取Bea
Flask上下文流程
weixin_33862993的博客
01-28 272
如图: 转载于:https://www.cnblogs.com/believepd/p/10331481.html
Spring Cloud--@RefreshScope动态刷新的原理
最新发布
IT利刃出鞘的博客
09-26 586
本文介绍Spring Cloud的@RefreshScope动态刷新的原理。
流程设计(流程上下文法)
a713040869的博客
01-20 195
todo 转载于:https://www.cnblogs.com/njcxwz/p/6329530.html
Spring Cloud @RefreshScope 原理是什么?
qq_41988225的博客
06-24 268
要清楚RefreshScope,先要了解Scope Scope(org.springframework.beans.factory.config.Scope)是Spring 2.0开始就有的核心的概念 RefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载。 Scope -> GenericScope -> RefreshScope i
java中应用上下文_java-将ApplicationContext创建为Spring bean(通过其他应用程序上下文)...
weixin_29127653的博客
02-28 288
我如何将一个ApplicationContext定义为其他应用程序上下文中的原型Spring bean.我还需要将当前上下文作为父级传递给新的应用程序上下文.细节:我有Bean,它表示富客户端应用程序中的一个用户会话.此类管理应用程序上下文和其他几个对象(例如数据库连接)的生命周期.该会话bean本身由特殊的“启动应用程序上下文”配置.现在,我想对该会话bean进行单元测试,但是遇到麻烦,因为特定...
Spring Refresh() 简析
Lisam Blog
11-09 6001
Spring IOC容器分为两部分:创建、实例化引言 pom.xml中引入(引入当前即可,会自动把spring其他基础jar包引入): <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId&gt...
写文章

热门文章

  • springboot启动流程源码解析(带流程图) 4357
  • springboot自动配置原理(详细-带流程图) 2013
  • springboot+mybatisplus+mysql双数据源动态切换(详细版) 1876
  • springmvc执行流程(带图) 1343
  • spring的上下文执行流程(refresh()底层原理及bean扫描流程) 566

分类专栏

  • java 7篇
  • springboot 1篇
  • spring 2篇
  • jvm 1篇

最新评论

  • springboot+mybatisplus+mysql双数据源动态切换(详细版)

    CSDN-Ada助手: 你的文章入选【CSDN 每天最佳新人】,请看:https://bbs.csdn.net/topics/609344083

大家在看

  • 中英双语酒店管理系统——pms系统,海外版
  • 论文 Python 实现WOA-CNN-BiGRU-Attention数据分类预测 64
  • 手环押金原路退回系统——足浴店——东方仙盟

最新文章

  • nacos1.4.1注册中心源码解析(临时实例AP模式)-含流程图
  • Nacos2.1.0注册中心源码解析-附带全流程图
  • springboot启动流程源码解析(带流程图)
2022年9篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家珠海玻璃钢雕塑价钱雕塑材料玻璃钢价格郴州玻璃钢雕塑厂家哪家好福建玻璃钢雕塑小品制作商场美陈有什么好处玻璃钢浮雕室外抽象雕塑东莞玻璃钢子母座椅雕塑玻璃钢雕塑作品价格玻璃钢仿真苹果雕塑武汉玻璃钢动漫雕塑江苏卡通玻璃钢雕塑制作厂家扬州玻璃钢海豚雕塑溧水商场亮化美陈贵州公园玻璃钢雕塑定做韶关玻璃钢雕塑制作玻璃钢型材雕塑河南小型玻璃钢花盆玻璃钢发光的雕塑肇庆玻璃钢骑士人物雕塑深圳开业商场美陈制作昆明户外玻璃钢花盆孝南玻璃钢花盆花器张掖抽象人物玻璃钢雕塑价格园林玻璃钢雕塑热线软装玻璃钢雕塑饰品商场美陈方案绿色生机商场美陈施工玻璃钢雕塑太阳下使用寿命玻璃钢座椅雕塑哪家好福建玻璃钢卡通雕塑价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化