refresh大揽

news2024/11/16 20:43:53

注意在每一步大操作之前都有一个前期准备

prepareRefresh()

设置spring启动的时间

设置spring关闭和开启的标志位

获取环境对象,并设置一些属性值,是系统环境的不是xml设置的

设置监听器,以及需要发布事件的集合。

        

ConfigurableListableBeanFactory beanFactary = obtainFreshBeanFactory(); 我创建的一定是个新工厂

创建容器对象:DefaultListableFactory

加载xml配置文件的属性值到当前工厂中,最重要的是BeanDefinition

ConfigurableListableBeanFactory beanFactary = obtainFreshBeanFactory()

spring bean创建总览 1_肥春勿扰的博客-CSDN博客

回想我们之前说的那张图,其实一切的开始就是从你这个工厂开始的 获得一个刷新的bean容器。

在BeanFactory接口中 提到了ListableBeanFactory 和ConfigurableBeanFactory 这是两个比较重要的子接口,再看DefaultListableBeanFactory类图,而这个类是我们经常用的。

 我们找bean的时候先向子容器,在向父容器中找。

生的枝叶,我们dogetbean方法里就有一个,去查找他的父容器

 ListableBeanFactory 我们看他的介绍

   ConfigurableBeanFactory介绍

里面有一堆的set方法,就可以填充一些对应的属性值了。

为什么类图折磨复杂?

扩展性

创建出工厂之后 我们开始读配置文件了

当前工厂设置好了,我们设置一些参数值

我们会设值一些序列化id值啊,定制化bean工厂啊?加载bean的定义信息,也就是解析配置文件了。里边很多重载,每次重载参数不一样,因为你的配置文件不只有一个。

这是一个重载的方法,里面会有不同reader

此时该走增强器了

prepareBeanFactory

 这里的ignoreDependencyInterface 忽略某个接口的实现。忽略aware(获取容器中某个对象的,只要实现了某个对象的aware接口,那么就有了这个对象的功能)

这一点为甚末忽略他,这时候后并没有初始化完整,所以这忽视过去,我们载设置aware属性的时候载调用invokeAwareMethod 设置aware接口的属性。载我们纵览的那种图上有

总结

完成bean工厂的初始化操作。

postProcessBeanFactory(beanFactory)

点进代码时空的,说明他可以扩展是是实现。

invokeBeanFactoryPostProcessors(beanFactory)

修改bean的注册信息

 注意看你这个bfpp也是个bean也就是我们那个spring的内置定义

单例对象实例化之前一定要调用。这里想想为什么

 也就是把上图个执行完。

这时候有有一个前期准呗了

registerBeanPostProcessors(beanFactory)

 注意和上边那个方法的定义。

相当于这一步也是一个准备工作

initMessageSource()

这东西就是一个国际化的操作。

initApplicationEventMulticaster()

初始化对应事件的广播器

OnRefresh()

空方法实现,二次开发

registerListeners

注册监听器

finishBeanFactoryInitialization(beanFactory)

也就是这

只看关键步骤里边方法

在Spring中,finishBeanFactoryInitialization(beanFactory)方法用于完成Bean工厂的初始化过程。它是Spring IoC容器在启动阶段中的最后一步,用于完成所有注册的Bean的实例化和初始化。

具体而言,finishBeanFactoryInitialization(beanFactory)方法通常包括以下步骤:

  1. 实例化非懒加载的单例Bean:遍历所有非懒加载的单例Bean定义,在Bean工厂中创建它们的实例,并将它们放入容器中。这些Bean将在容器启动时立即实例化。

  2. 执行Bean的初始化方法:对于每个实例化的Bean,调用其初始化方法。初始化方法可以通过实现InitializingBean接口的afterPropertiesSet()方法,或者通过在Bean定义中指定的自定义初始化方法来定义。

  3. 注册Bean后处理器(BeanPostProcessor):将所有注册的BeanPostProcessor实现类应用于所有已实例化的Bean。BeanPostProcessor可以在Bean实例化后对其进行自定义的初始化和修改。

  4. 完成Bean工厂的初始化:标记Bean工厂为已完成初始化状态。这表示所有Bean的实例化、初始化和后处理工作已经完成,容器已准备好供应用程序使用。

总之,finishBeanFactoryInitialization(beanFactory)方法负责完成Spring IoC容器中所有注册Bean的实例化和初始化过程,确保容器中的所有Bean都已准备就绪,可以供应用程序使用。

spring当中带do开头的方法,也就是事件干活的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java算法_ BST 中第 k 个最小元素 (LeetCode_Hot100)

题目描述:给定一个二叉搜索树的根节点 ,和一个整数 ,请你设计一个算法查找其中第 个最小元素(从 1 开始计数)。 获得更多?算法思路:代码文档,算法解析的私得。 运行效果 完整代码 /*** 2 * Aut…

实验三 HBase1.2.6安装及配置

系列文章目录 文章目录 系列文章目录前言一、HBase1.2.6的安装二、HBase1.2.6的配置2.1 单机模式配置2.2 伪分布式模式配置 总结参考 前言 在安装HBase1.2.6之前,需要安装好hadoop2.7.6。 本篇文章参考:HBase2.2.2安装和编程实践指南 一、HBase1.2.6的安…

双频RTK定位技术原理及解决方案

双频RTK定位技术 双频RTK(Real-Time Kinematic)定位技术是一种利用卫星导航系统进行高精度实时定位的方法,它通过同时使用两个不同频率的载波信号来测量载波相位差,从而提高定位精度和抗干扰能力。以下是双频RTK定位技术的原理和解…

一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)

本地搭建ChatGPT(非api调用) 第一种方法:使用Docker本地化部署第一步,下载安装Docker登录GPT 第二种方法:不部署项目,直接连接 第一种方法:使用Docker本地化部署 这种方法的好处就是没有登录限…

dolphinscheduler的僵尸任务清理和清理一直在运行的任务状态

dolphinscheduler的僵尸任务清理 界面操作不了的 只能去数据库更改状态或则删除掉 原因:海豚调度中有几百条僵尸任务, 界面怎么也删不掉,想从数据库中删除,开始查找从数据库删除的办法。 参考以下脚本,结合我库中僵尸…

在浏览器中打包 TypeScript 系列1:ES 模块和导入映射Import map

原文地址 这是“在浏览器中打包 TypeScript 系列”的第 1 部分。 第 2 部分:在浏览器中打包 TypeScript JS打包简史 让我们绕个小弯,看看在使用 ES 模块之前是如何使用 JS 的。 (年份为近似值) 1. 黑暗时代(2010年…

SPSS--如何使用分层分析以及分层分析案例分享

分层分析:将资料按某个或某些需要控制的变量的不同分类进行分层,然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层,可使每层内的两个比较组在所控…

七夕福利来袭:多种表白代码/语录超级赠送,不信你没女朋友

前言 马上七夕了~又是牛郎织女相会的一天! 不管什么时候, 这都是一个特别的日子, 在这个充满幸福的日子里, 我要把最美好的祝福, 送给心里有我的每一个人; 祝愿大家: 一生平安&#xff0c…

兼具传统和新锐基因的极氪,是怎么做用户运营的?|新能源车专题研究

主笔:浣芳黛 出品:增长黑盒研究组 近几个月来,新能源车势头强劲,众多车企纷纷传出连月增长和再创新高的捷报,在当下整体经济复苏缓慢的映衬下,显得格外耀眼。 于是,增长黑盒近期针对新能源车企展…

Ganache的安装与设置连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络,提供图形化界面,log日志等;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

docker 06(docker compose)

一、服务编排 二、docker compose

【Mybatis源码分析】解析语句标签_Select|Update|Insert|Delete

解析语句标签 Select|Update|Insert|Delete 一、前言二、语句标签的源码分析三、sql 标签的解析四、总结 一、前言 在阐述解析语句标签之前,得先知道我们的语句标签内容最后被封装到Configuration哪?(都应该知道 Mybatis 通过的是 XMLConfig…

骨传导耳机是如何让我们听到声音的?为什么要选择骨传导耳机?

骨传导耳机的工作原理就是通过人的颅骨、骨迷路、螺旋器、听觉中枢来传递声波,不需要接触到人的外耳道和内耳膜,省去了许多声波传递的步骤,相对于入耳式耳机会更加的保护耳朵。 说简单一点,平时我们自己挠头发或者通过上次碰撞牙…

交换机生成树STP

生成树协议(spanning-tree-protocol,stp):在具有物理环路的交换机网络上生成没有回路的逻辑网络的方法,生成树协议使用生成树算法,在一个具有冗余路径的容错网络中计算出一个无环路的路径,使一部分端口处于…

Blazor Session设置

文章目录 前言SessionProtectedSessionStorage 类信息加密使用场景 代码部分Nuget扩展安装源码使用, 相关资料 前言 微软官方封装了一些浏览器的操作,其中就有Session的操作的封装 ProtectedSessionStorage 微软文档 因为我们知道,依赖注入…

每个.NET开发都应掌握的C#委托事件知识点

上篇文章讲述了C#接口的知识点,本文将介绍C#委托事件知识点。C#作为.NET开发的核心语言之一,提供了丰富的特性来支持面向对象编程和事件驱动的模型。其中,委托和事件是C#中不可或缺的关键概念,每个.NET开发者都应该深入理解它们的…

什么是原码、反码和补码

什么是原码、反码和补码 文章目录 什么是原码、反码和补码1、机器数2、原码3、反码4、补码5、总结 1、机器数 前言 一个数在计算机中的表示形式是二进制的话,这个数其实就叫机器数。 机器数通常是带有符号的(指有正数和负数之分),…

【后端速成 Vue】第一个 Vue 程序

1、为什么要学习 Vue? 为什么使用 Vue? 回想之前,前后端交互的时候,前端收到后端响应的数据,接着将数据渲染到页面上,之前使用的是 JavaScript 或者 基于 JavaScript 的 Jquery,但是这两个用起来还是不太…

C++新经典08--范围for、new内存动态分配与nullptr

范围for语句 C语言部分学习过了for语句,在C11中for语句的能力被进一步扩展,引入了范围for语句,用于遍历一个序列。看看如下范例: int v[]{12,13,14,16,18};//数组ⅴ中每个元素依次放入x并打印x值。相当于把ⅴ的每个元素值复制到x…

第11步---MySQL的优化

第11步---MySQL的优化 1.概念 原先写功能。后来对平静进行优化 设计 查询语句 索引 存储 2.查看执行效率 -- 查看当前会话sql得执行类型得统计信息SHOW session STATUS like Com%上面展示得信息就是统计了当前会话得执行得操作得次数。 -- 查看全局得 SHOW GLOBAL STATU…