refresh大揽

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

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开头的方法,也就是事件干活的方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅析Java设计模式之四策略模式

title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…

【自动电压调节器】无功功率控制的终端电压控制研究(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树

一、驱动程序分离的思想 【IMX6ULL驱动开发学习】05.字符设备驱动开发模板(包括读写函数、poll机制、异步通知、定时器、中断、自动创建设备节点和环形缓冲区)_阿龙还在写代码的博客-CSDN博客 之前编写驱动程序的代码存在不少弊端:移植性差…

Redis从基础到进阶篇(一)

目录 一、了解NoSql 1.1 什么是Nosql 1.2 为什么要使用NoSql 1.3 NoSql数据库的优势 1.4 常见的NoSql产品 1.5 各产品的区别 二、Redis介绍 2.1什么是Redis 2.2 Redis优势 2.3 Redis应用场景 2.4 Redis下载 三、Linux下安装Redis 3.1 环境准备 3.2 Redis的…

广告牌安全传感器,实时监测事故隐患尽在掌握

在现代城市中,广告牌作为商业宣传的重要媒介,已然成为城市中一道独特的风景线。然而,随着城市迅速发展,广告牌的安全问题也引起了大众关注。广告招牌一般悬挂于建筑物高处,量大面大。由于设计、材料、施工方法的缺陷&a…

windows电脑系统自带的画图工具如何实现自由拼图

1.首先选中你要拼接的第一张图片,右键选着编辑,会自动打开自带的画图工具 然后就是打开第一张图片,如下图所示 接着就是将画布托大,如下图所示。 然后点击选择,选择下面的空白区域,选着区域的范围要比准备拼…

企微配置回调服务

1、企微配置可信域名 2、企微获取成员userID 3、企微获取用户敏感数据 4、企微配置回调服务 文章目录 一、简介1、概述2、相关文档地址 二、企微配置消息服务器1、配置消息接收参数2、参数解析3、参数拼接规则 三、代码编写—使用已有库1、代码下载2、代码修改3、服务代码编写 …

阿里云轻量应用服务器和云服务器有什么区别?2023更新

阿里云轻量应用服务器和云服务器ECS有什么区别?ECS是专业级云服务器,轻量应用服务器是轻量级服务器,轻量服务器使用门槛更低,适合个人开发者或中小企业新手使用,可视化运维,云服务器ECS适合集群类、高可用、…

gor工具http流量复制、流量回放,生产运维生气

gor是一款流量复制回放工具,gor工具的官网:https://goreplay.org/ 1、对某个端口的http流量进行打印 ./gor --input-raw :8000 --output-stdout 2、对流量实时转发,把81端口流量转发到192.168.3.221:80端口 ./gor --input-raw :81--output-ht…

Qt+Pyhton实现麒麟V10系统下word文档读写功能

目录 前言1.C调用python1.1 安装Python开发环境1.2 修改Qt工程配置1.3 初始化Python环境1.4 C 调用Python 函数1.5 常用的Python接口 2.python虚拟环境2.1Python虚拟环境简介2.2 virtualenv 安装及使用2.3 在C程序中配置virtualenv 虚拟环境 3.python-docx库的应用4.总结 前言 …

基于YOLOv8模型和PCB电子线路板缺陷目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型PCB电子线路板缺陷目标检测系统可用于日常生活中检测与定位PCB线路板瑕疵,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检…

panda3d加载模型复习和python面向对象编程属性学习

运行一个python示例;然后去除一些代码,只剩下加载模型相关,如下; from panda3d.core import loadPrcFileData # Configure the parallax mapping settings (these are just the defaults) loadPrcFileData("", "p…

Vue.js知识点学习的一点笔记

一、虚拟DOM 1、原生JS是命令式编程,当渲染在页面的数据发生一点点变化,需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念,运用diff算法,比较新旧数据,相同的数据不变不重渲染,不同的部分新数据覆…

python 连接Redis 数据库

pip install redis python代码 import redis# 连接数据库 r redis.Redis(host192.168.56.15, port6379, db0)# 存储数据 #r.set(key, value) r.set(name, zaraNet)# 获取数据 value r.get(name) print(value)# 关闭连接(可选) r.close()

spring boot 整合mongodb

1、安装依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2、配置数据库连接 spring:data:mongodb:host: localhostport: 27017username: xxxxxxp…

.fargo后缀勒索病毒|勒索病毒解密恢复|fargo勒索病毒解密|勒索病毒解密恢复|数据库恢复

fargo勒索病毒概述&#xff0c;fargo勒索病毒解密恢复及日常防护建议 目录&#xff1a; fargo勒索病毒介绍感染fargo勒索病毒后的表现fargo勒索病毒的感染形式如何恢复.fargo后缀勒索病毒fargo勒索病毒日常防护建议 简介&#xff1a; 河北某有限公司的财务系统&#xff0c;由…

拼多多商品详情API接入站点,实时数据json格式示例

作为国内最大的电商平台之一&#xff0c;拼多多数据采集具有多个维度。 有人需要采集商品信息&#xff0c;包括品类、品牌、产品名、价格、销量等字段&#xff0c;以了解商品销售状况、热门商品属性&#xff0c;进行市场扩大和重要决策&#xff1b; 商品数据&#xff1a;拼…

【数字实验室】时钟切换

大部分开发者使用 BUFGCTRL 或 BUFGMUX进行时钟切换&#xff0c;它们在时钟切换上可以提供无毛刺输出。然而&#xff0c;了解所涉及的原理是有好处的。 当然&#xff0c;无论我们在同步逻辑中使用哪种技术&#xff0c;重要的是要确保在进行时钟切换时输出上没有毛刺。任何故障都…

docker安装Oracle11gR2

文章目录 目录 文章目录 前言 一、前期准备 二、具体配置 2.1 配置oracle容器 2.2 配置navicat连接 总结 前言 使用docker模拟oracle环境 一、前期准备 安装好docker #拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g #启动 docker run -…

YOLOv5改进系列(22)——替换主干网络之MobileViTv1(一种轻量级的、通用的移动设备 ViT)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制