Spring容器创建过程

spring容器的创建过程 阅读详情

Spring容器创建过程

  Spring容器的refresh()   创建刷新

 1  prepareRefresh() 刷新前的预处理

      1) initProPertySources() 初始化一些属性设置; 子类定义个性化的属性设置方法

      2) getEnvironment( ) .validateRequiredProperties() 检验属性的合法性

      3)earlyApplicationEvents = new LinkedHashSet<ApplicationEvent>(); 保存容器中的一些早期的事件

2 obtainFreshBeanFactory() 获取BeanFactory

     1)refreshBeanFactory() 刷新(创建) BeanFactory

                创建了一个this.beanFactory =  new DefaultListableBeanFactory()

     2) getBeanFactory() 返回刚才GenericApplicationContext 创建的BeanFactory对象

     3) 将创建的BeanFactory(DefaultListableBeanFactory)返回

3 prepareBeanFactory(beanFactory); BeanFactory的预准备工作(BeanFactory进行一些设置) 

     1 设置BeanFactory 的类加载器、支持表达式解析器

     2 添加部分BeanPostProcessor[ApplicationContextAwareProcessor]

    3 设置忽略的自动装配的接口 EnvironmentAware、 EmbeddedValueResolverAware

    4  注册可以解析的自动装配。 直接在任何组件中自动注入: BeanFactory、 ResourceLoader、ApplicationEventPublisher、ApplicationContext

    5 添加BeanPostProcessor【ApplicationListenerDetector功能的Processor】

    6 添加编译时的AspectJ

    7 给BeanFactory中注册有些能用的组件

            environment【ConfigurableEnvironmetn】

            systemProperties  【Map<String, Object>】

             systemEnvironment 【Map<String, Object>】]       

4 PostProcessoBeanFactory(BeanFactory) BeanFactory准备工作完成后进行的后置处理工作

  1) 子类通过重写这个方法来在BeanFactory创建并又准备完成以后做进一步的设置

 

到此为止  BeanFactory创建及其预准备工作完成

 

 

7  initMessageSource()  初始化MessageSource组件(做国际化功能,消息绑定,消息解析)

    1) 获取BeanFactory

    2) 看容器是否有id 为messageSource的 类型是MessageSource的组件

           如果有赋值给messageSource 如果没有自己创建一个DelegatingMessageSource

                     MessageSource去除估计会配置文件中的某个key值,能按照区域信息获取

     3) 把创建好的MessageSource注册在容器中 以后获取国际化配置文件的值的时候,自动注入MessageSource

8 initApplicationEventMulticaster() 初始化时间派发器

   1) 获取BeanFactory

   2)  从BeanFactory中获取applicationEventMulticaster的ApplicationEventMulticaster

   3) 如果上一步没有配置,创建一个SimpleApplicationEventMulticaster

   4) 将创建的ApplicationEventMulticaster添加到BeanFactory中,以后其他组件直接注入

 

9  onRerresh() 留给容器(子类)

    1)子类重写这个方法,在容器刷新的时候可以自定义逻辑

10   registerListeners() 给容器中将所有项目里面的ApplicationListener注册进来了

    1)从容器中拿到所有ApplicationListener

    2) 将每个监听器添加到时间派发器中

         getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName)

    3) 派发之前步骤产生的事件

11 finishBeanFactoryInitialization(beanFactory) 初始化所有剩下的单实例bean 

    1)获取容器中的所有Bean 一次进行初始和创建对象

    2)获取Bdan的定义信息; RootBedanDefinition

    3)Bean不是抽象的,是单实例的,懒加载的

            1) 判断是否是FactoryBean  是否实现FactoryBean接口的bean

            2)不是工厂Bean  利用getBean(beanName) 创建对象

                   0) getBean(beanName)  IOC.getBean()

                   1)doGetBean(name, null, null ,false) 

 

                   2) 先获取缓存中保存的单实例Bean。 如果能够获取到这个Bean之前被创建过(所有创建过的单实例Bean都会被缓存起来) 

                   3)缓存中获取不到,开始Bean的创建对象流程

                   4)标记当前bean已经被创建

                   5) 获取Bean的定义信息

                   6)  获取当前Bean依赖的其他Bean,如果有按照getBean() 把依赖的Bean先创建出来
                   7) 启动单实例Bean的创建流程

                            1) createBean(beanName, mbd , args)

                            2)  Object bean =resolveBeforeINstantiation(beanName, mbdToUse)

                       

 

 

简单总结:

  1 Spring容器在启动时候,贤惠保存素有注册进来的Bean的定义信息

         xml   注解  给容器注册bean定义信息

 2  spring容器会在何时时机创建这些bean

      用到这个bean 的时候; 利用getBean创建Bean;创建好以后保存在容器中

     统一创建剩下所有的bean的时候; finishBeanFactoryInitialization() 

 3 后置处理器

   1 每一个bean创建完成都会使用各种后置处理器进行处理,来增强bean的功能

           处理自动注入   aop功能等 以及支持异步调用的 任务调度的 增强功能注解都是有响应的后置处理器

4 时间驱动模型

   ApplicationListener 事件监听

   ApplicationEventMulticaster 事件派发

 

posted @ 2019-04-12 00:10 toov5 阅读(...) 评论(...) 编辑 收藏

RustFS vs MinIO:深入对比分布式存储的性能、功能与选型指南 RustFS与MinIO是两款热门分布式存储系统,分别针对高性能与通用场景设计。RustFS基于Rust语言,在吞吐量(最高提升46%)、延迟(降低37%)和资源效率(内存占用减少67%)上显著优于MinIO,适合AI训练、金融级应用等高性能需求。MinIO凭借成熟的S3兼容性、云原生集成和企业级功能,更适用于混合云及现有S3生态。许可方面,RustFS采用Apache 2.0,MinIO为AGPLv3。选型建议:优先RustFS应对性能敏感场景,选择MinIO注重生态兼容性,也可考虑混合架构策略。 阅读详情

相关推荐

用野火FPGA开发板(EP4CE10)手把手教你实现一个高精度频率计(附完整Verilog代码)

本文详细介绍了基于野火FPGA开发板(EP4CE10)实现高精度频率计的全过程,涵盖等精度测量法的核心原理、Verilog代码实现及优化技巧。通过实际案例演示,帮助开发者掌握1Hz-50MHz范围、精度达0.1%的频率计设计方法,并提供完整的工程代码和实测数据。

weixin_29261711的博客 439

Spring源码1——容器创建流程

二者用于在容器加载Bean后,实例化之前对Bean的进行修改或(修改元数据或添加逻辑),但是前者是对整个BeanFactory,仅执行一次;获取BeanFactory,查看有无MesageSource组件,有则赋值,无则new一个默认的DelegatingMessageSource并注册到容器。居然是空的,这里实际是留给子类做一些事情的,如自己可以写一个子类,重写此方法,做一些个性化属性处理。空的,可以写IOC容器的子类重写该方法,对工厂做一个后置处理。负责国际化,消息绑定,消息解析。

qq_45233518的博客 655

态路小课堂丨三款800G光模块方案介绍—SR8/DR8/2FR4

800G QSFP-DD 2FR4光模块使用CWDM4波长(1271/1291/1311/1331nm),单通道速率为100G,通过MUX减小光纤的数目,其光学接口采用CS接口或双芯LC接口。

poposu的博客 2386

spring的创建

本文才用idear 2018 环境为jdk1.8,idea作为一个开发工具,里面集成了非常多的模块,本文主要讲解spring的创建,spring容器加载时间 首先选择模块或工程 然后选择spring,选择jdk,选择springjar,选择自动生成一个appcationContext.xml,选择工程的jar下载方式 点击next,输入模块名等。。。 这样将会得到一个spri...

张斌斌的博客 410

最终篇——SWAT模型的建立

同理,Soil Data也是同样的方法导入,在Soil Database Options的选项中,选择UserSiol,用同样的方法导入土壤类型,进行重分类。打开窗口后,只定义HRU Thresholdes,其余两个不用设置,设定各数据单元的计算率,这里的10%的意思是计算精度,即分成级HRU计算单元太小,小于平均计算单元的10%,我们就不对这HRU单元进行计算(也就是说太破碎的计算单元不进行计算),若选择0%意味着全部进行计算,需要耗费大量的内存和时间,对计算机要求较高,不建议。

m0_72556434的博客 5621

【ADCU详解】PMIC电源管理集成电路详解

自动驾驶域控制器(ADCU)中的电源管理集成电路(PMIC)是高度集成的关键部件,负责为计算核心、传感器等提供高效稳定的多路电源。其核心特点包括:符合车规AEC-Q100标准、支持功能安全ASIL等级、精确的时序控制及强抗干扰能力。PMIC由开关稳压器、LDO、时序控制器、监控保护电路等模块组成,通过分层电源树框架实现电能分配。设计需考虑效率、功率密度、噪声性能等关键维度,底层基于Buck转换器和LDO原理工作。使用中需满足严苛的车规环境要求,并通过静态/动态测试及故障注入测试进行验证,确保系统可靠性和安全

qq_40844444的博客 842

Spring容器创建全流程

Spring容器的refresh()[创建刷新] 1.prepareRefresh()刷新前的预处理; initPropertySources();初始化一些属性设置;子类自定义个性化的属性设置方法; getEnvironment().validateRequiredProperties();检验属性的合法等; this.earlyApplicationEvents = new LinkedHashSet<>();保存容器中的事件; 2.ConfigurableListableB..

qq_35018473的博客 1481

SAP FICO 资产会计AA后台配置 (上)

输入折旧表“CZ11”如有外币计价的资产,则需指定外币计价的资产折旧范围,以及规则。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。新增资产类型:Z101 固定资产-房屋及建筑物新增资产类型:Z301 固定资产-房屋及建筑物。

ghgxm520的博客 1762

Spring容器创建及启动过程

创建Spring容器: @Test public void test01(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class); applicationContext.close(); } ...

zhoushimiao1990的博客 5619

从零开始:小鼠Bulk RNA-seq全流程实战指南

本文提供了一份详尽的小鼠Bulk RNA-seq全流程实战指南,涵盖从软件环境搭建、原始数据质控与清洗、序列比对、基因定量到下游差异表达分析与功能富集。内容面向生物信息学新手,通过清晰的代码示例和步骤解析,帮助读者系统掌握Bulk RNA-seq数据分析的核心技能,并产出可靠的生物学洞见。

lake5的博客 715

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 327

spring IOC容器创建过程详解

启动服务,实际上是创建spring IOC容器的过程,而IOC容器的实质是多种Map集合的组合,最终的数据存在多个Map中 public AnnotationConfigApplicationContext(Class<?>… annotatedClasses) { this(); register(annotatedClasses); refresh(); } 从这段代码可以看出,s...

学习达人的日记本 2162

SKUA-GOCAD入门教程-第八节 线的创建与编辑7和8

本文介绍了曲线编辑操作的主要功能,包括曲线部分和区域的管理操作。在曲线部分操作方面,详细说明了如何合并、删除、移动和过滤曲线部分,支持精确或带公差的合并方式。在曲线区域操作方面,阐述了保留/删除区域点、移动区域点、保留/删除区域线段等操作。此外还介绍了节点连接功能,包括新增/删除连接、端点连接以及为曲线赋予地质特征的方法。

江洋大葱的博客 390

Spring 容器的创建过程

文章目录概览1、prepareRefresh1.1、initPropertySources1.2、validateRequiredProperties2、obtainFreshBeanFactory2.1、refreshBeanFactory2.2、getBeanFactory3、prepareBeanFactory4、postProcessBeanFactory5、invokeBeanFactoryPostProcessors5.0、invokeBeanFactoryPostProcessors6、reg

WS的小屋 767

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring IOC容器创建过程

直接上图吧。这是SpringIOC容器创建的整个过程 总共有12大步。设计者采用了模板方法模式,把这个12步固定写了下来,在一个抽象的容器里(AbstractApplicationContext),具体容器必须继承这个类来实现一些空的模板方法。 从spring IOC容器整个创建过程可以看出Spring给我们提供了两大利器来对程序进行扩展。所谓的容器本质就是一个ConcurrentHashMa...

wskyp的博客 1866

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring IOC容器的创建过程

当使用注解来定义Bean时,我们通常会结合`@Component`、`@Service`、`@Repository`、`@Controller`等注解来标识Bean,并使用`@Autowired`注解来进行依赖注入。总的来说,Spring IOC容器的创建过程包括了加载配置文件、实例化容器、实例化Bean、注入依赖、初始化Bean等步骤,最终使得应用程序能够通过IOC容器来管理和使用Bean对象。4. 注入依赖:一旦Bean对象被实例化,容器会根据配置文件中的依赖关系,将相应的依赖注入到Bean中。

qq_56005481的博客 1838

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Spring容器的创建过程

Spring容器的创建过程 入口 public AnnotationConfigApplicationContext(Class&amp;amp;amp;amp;amp;amp;lt;?&amp;amp;amp;amp;amp;amp;gt;... annotatedClasses) { this(); register(annotatedClasses); //重点看下这个刷新方法 refresh(); } 这个就是创建的具体步骤 @Override public v

qq_40867050的博客 186

Spring - 手把手分析 IoC 容器创建过程

Spring - 手把手分析 IoC 容器创建过程

业精于勤荒于嬉 2870

Spring IoC容器以及Bean的创建过程

1 Spring静态结构介绍 什么是Spring,可以自己网上查询,总之,可以说是一个面向Web应用开发的,轻量级,企业级框架。它包含了如下图所示一些模块,这些模块的详细的概念和所负责的职责,可以通过搜索检索到。 1.1 BeanFactory BeanFactory关键类继承 上图1所示位置, BeanFactory是整个BeanFactoryl类体系中最顶层的接口。 上图2所示, HierachicalBeanFactory 描述了BeanFactory是可以组成...

rendawei636专注医疗软件 1143

Spring容器创建过程——源码总结

Spring容器创建过程源码总结 一、Spring容器在启动的时候,会先保存所有注册进来的Bean的定义信息 (1)XML注册的bean (2)注解注册的bean 二、Spring容器会在合适的时机创建这些Bean (1)用到这个Bean的时候,利用getBean()方法创建bean,创建好以后保存在容器中 (2)统一创建剩下的所有Bean的时候,调用finishBeanFactoryInitialization()来创建剩下的单实例Bean 三、后置处理器BeanPostProcessor (1)有各种类

qq_39794062的博客 270

spring容器创建过程(总结版)

Spring容器的refresh()【创建刷新】; 1、prepareRefresh()刷新前的预处理; 1)、initPropertySources()初始化一些属性设置;子类自定义个性化的属性设置方法; 2)、getEnvironment().validateRequiredProperties();检验属性的合法等 3)、earlyApplicationEvents= new LinkedHashSet();保存容器中的一些早期的事件; 2、obtainFreshBeanFactory();获取Bea

大叶子不小的博客 1106

深入骨髓!Spring IOC容器创建全过程剖析

Spring IOC 容器(Inversion of Control Container)是 Spring 框架的核心,负责管理应用对象的生命周期、依赖关系和配置。理解其创建过程对于掌握 Spring 至关重要。核心目标: 读取配置元数据(XML、注解、Java Config),解析其中的 Bean 定义(BeanDefinition),实例化 Bean,装配依赖关系(依赖注入),执行初始化回调,最终提供一个包含所有配置好、可用的 Bean 的容器。

张小洛的BOLG 1275

Spring容器创建过程分析

Spring容器的refresh()[创建刷新], ioc容器就是一些Map;很多的Map里面保存了单实例Bean,环境信息 详细的知识和spring的其他原理请看我的博客:https://blog.youkuaiyun.com/wang121213145/article/details/123953486 1.prepareRefresh()刷新前的预处理; initPropertySources();初始化一些属性设置;子类自定义个性化的属性设置方法; getEnvironment().validateRequi

世上哪有什么岁月静好,不过是有人替你负重前行 248
上一篇: 扩展
下一篇: Aware接口
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值