spring容器加载过程

Spring框架Ioc容器加载流程及Bean的生命周期源码分析 学习视频:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-dWx4ae2h-1712113363460)][外链图片转存中…(img-xEEzxJr6-1712113363461)] 阅读详情

一、封装配置文件

spring的配置文件读取是通过ClassPathResource进行封装的。ClassPathResource类是简介实现了接口Resource,而Resource的作用是为了封装所有spring内部使用到的底层资源:File,URL,ClassPath等。Resource接口的定义如下:

spring的配置文件读取是通过ClassPathResource进行封装的。ClassPathResource类是简介实现了接口Resource,而Resource的作用是为了封装所有spring内部使用到的底层资源:File,URL,ClassPath等。Resource接口的定义如下:

public interface InputStreamSource {
	InputStream getInputStream() throws IOException;
}

public interface Resource extends InputStreamSource {
	boolean exists();
	boolean isReadable();
	boolean isOpen();
	URL getURL() throws IOException;
	URI getURI() throws IOException;
	File getFile() throws IOException;
	long contentLength() throws IOException;
	long lastModified() throws IOException;
	Resource createRelative(String relativePath) throws IOException;
	String getFilename();
	String getDescription();
}

不同来源的资源文件都有相对应的Resource实现:文件(FileSystemResource)、ClassPath资源(ClassPathResource)等,通过getInputStream()获得inputStream之后就可以正常开发了。

二、加载bean

加载单例bean时首先尝试从singleObjects中加载,如果获取不到再从earlySingletonObjects里面获取,如果还获取不到,再尝试从singletonFactories中获取beanName对应的ObjectFactory,然后调用这个ObjectFactory的getObject来创建bean,并放到earlySingletonObjects里面去,并且从singletonFactories里面remove掉这个ObjectFactory。这里涉及到的用于存储不同bean的map:

  • singletonObjects:用于保存BeanName和创建bean实例之间的关系。
  • singletonFactories:用于保存BeanName和创建bean的工厂之间的关系。
  • earlySingletonObjects:也是用于保存BeanName和创建bean实例之间的关系。与singletonObjects不同的是,当一个单例bean被放到这里面后,那么当bean还在创建过程中,就可以通过getBean方法获取到了,其目的是用来检测循环引用
  • registerSingletons:用来保存当前所有已经注册的bean。

如果没有获取到单例,则开始准备创建单例,其流程如下:

Spring容器加载过程分析 IOC类图结构 各个接口的作用 接口名 说明 BeanFactory 定义了基本IOC容器的规范,包含像getBean()这样的IOC容器的基本方法 HierarchicalBeanFactory 增加了getParentBeanFactory()的接口功能,使BeanFactory具备了双亲IOC接口的关联功能 ConfigurableBeanFactory 主要定义了... 阅读详情

相关推荐

spring源码之Ioc容器加载过程详解

一、前言 针对于spring源码的初步学习,我认为首先应该掌握四大块,基于四大块全部掌握的基础上在进行扩展深入研究学习,具体四块如下: 1.Ioc容器加载的过程 2.spring如何解决循环依赖 3.spring Aop的实现 4.spring 事务管理实现 我觉得如果掌握了上面的四点,那么我们基本上就可以很自豪的说精通spring了,也算掌握了spring大概一半的内容了。 本文主要研究Ioc容器的加载过程。 二、什么是Ioc容器? 我们常说Ioc是一个容器,是的,ioc就是一个容器,并

bugNoneNull的博客 1148

Spring 容器加载流程

个人学习笔记 7、finishBeanFactoryInitialization(beanFactory);初始化完成剩下的所有单实例bean 1、获取到所有的bean实例RootBeanDefinition 2、判断if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit()) 1、如果通过判断是否为FactoryBean 2、不是工厂bean,利用getBean(beanName);创建对象

wyhhahaha的博客 521

SAP SD跨公司销售IDOC自动记账配置实战指南

本文详细介绍了SAP SD模块中跨公司销售IDOC自动记账的配置实战指南。通过IDOC技术实现集团企业间交易的自动化处理,显著提升财务效率和准确性。文章涵盖前置配置、RFC连接、合作伙伴参数设置及财务科目分配等关键步骤,并提供了常见错误排查和性能优化建议,帮助用户快速掌握这一高效业务流程。

weixin_29284885的博客 770

Spring的加载过程

Spring提供了IOC(控制反转)和AOP(面向切面编程)基本功能,解决企业应用开发的复杂性的一个开源框架。其核心组件包括core、context、bean。 启动过程 在一个基于springmvc的web应用中,需要有一个web容器,一般我们用tomacat,这个web容器提供了一个全局的上下文环境ServletContext,同时也是Spring IoC容器的宿主环境。 宿主容器启动时,其入口文件便是web.xml。web.xml需要定义两个最基本的内容,ContextLoaderListener和D

m0_67402341的博客 491

电子结构设计(EMD)十年知识总结

客官,你的面相是做结构设计的奇才~1. 材料选择【一出手的0.1s就败了】2. 钣金件设计【折来折去有啥难】3. 塑胶件设计【看着好复杂】4. 型材件设计【凭啥不让我设计】5. 电子结构(PCBA)设计【静电肿么要我背锅】6. 包装设计【要的就是金玉其外,败絮其中】7. 外观(工业)设计【好不好看,谁说了算】8. 标签设计【】9. 标准件选择【一个螺丝难倒英雄汉/提起螺丝,英雄气短】10. 计算仿...

wfeng86的博客 1569

Unity通过Vosk实现离线语音识别方法

以下是一个使用 Unity 和 Vosk(一个开源的离线语音识别库)的简单示例。将Vosk的DLL文件(如libvosk.dll、vosk.dll等)放入Assets/Plugins文件夹中。通过以上步骤,你可以在Unity中实现一个简单的离线语音识别功能。音频格式:确保录音的音频格式与Vosk模型要求的格式一致(通常是16kHz、16bit单声道)。首先,你需要下载Vosk的语音识别模型。在Assets文件夹中创建一个Plugins文件夹,用于存放Vosk的DLL文件。打开Unity并创建一个新的项目。

qq_39515892的博客 2070

Spring IOC 容器加载过程

IOC(Inversion of Control,控制反转)是 Spring 框架的核心,其加载过程是 Spring 应用启动的关键阶段。

huing的博客 1292

忆阻器(二)——忆阻模拟器

除了真实的器件,我们也可以用运放和乘法器来搭忆阻模拟器。这节将介绍数学模型、matlab仿真及multisim仿真。 一、数学模型 忆阻分为磁控和荷控两种,这里介绍三次非线性磁控忆阻模型: {I=W(φ)VW(φ)=a+3bφ2dφdt=V \begin{cases} I=W(\varphi)V \\ W(\varphi)=a+3b \varphi ^2\\ \frac{d \varphi }{dt}=V \end{cases} ⎩⎪⎨⎪⎧​I=W(φ)VW(φ)=a+3bφ2dtdφ​=V​ 这里的WWW

http://www.icfgblog.com/ 1万+

Spring-Ioc容器的加载过程?

Spring-Ioc容器的加载过程?

java1234的博客 833

Zemax与Matlab交互:双胶合优化详细流程

Zemax与Matlab交互:双胶合优化详细流程

weixin_72050316的博客 629

YOLO26优化:注意力魔改 | EMA:基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA

加入EMA注意力,一种基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA等经典注意力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 334

Spring-loc容器的加载过程?

Spring-loc容器的加载过程?

java1234的博客 1058

MFC C++ 中实现跨平台(WindowsLinux)的远程桌面控制

**输入捕获**:在显示窗口中捕获鼠标/键盘事件(重写 `OnLButtonDown`、`OnMouseMove`、`OnKeyDown` 等),将事件坐标/键值通过网络发送到服务端。- **显示窗口**:使用 `CStatic` 或自定义 `CWnd` 派生类显示远程桌面图像(通过 `StretchDIBits` 绘制解压后的像素数据)。// 转换为相对坐标。- **Wayland 支持**:需使用 `libweston` 或 `xdg-desktop-portal`,较复杂,建议优先支持 X11。

寒寒豆豆软件公司的博客 155

Spring容器的加载过程

Gertent 1810

yolov26改进 | 检测头篇 | 利用渐近特征金字塔网络AFPN改进yolov26检测头融合P2网络结构(让小目标无所遁形,全网独家首发)

本文介绍一种基于AFPN渐近特征金字塔网络改进的YOLOv26四检测头Detect_FPN。AFPN通过逐级融合底层细节、中层结构与高层语义特征,缩小不同尺度特征之间的语义差距,减少直接融合带来的信息冲突,使检测头获得更稳定、更充分的多尺度表达。本文进一步增加高分辨率小目标检测分支,强化对微小目标、密集目标和复杂背景目标的感知能力,适合工业缺陷、遥感及无人机等场景。文中将展示基础模型与改进模型的训练对比结果,并提供完整代码、配置文件、模块注册方法及Codex修改思路,方便直接复现和二次创新。

Snu77的博客 372

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring IOC容器加载过程源码

一、IOC容器加载过程 实例化容器入口 // 加载spring上下文,同时传入自己的配置类Config AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class); 从AnnotationConfigApplicationContext构造方法作为切入点: public AnnotationConfigApplicationContext(Class<?>..

业精于勤,荒于嬉 794

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring容器启动(IOC加载)过程

Spring容器启动(IOC加载)过程解析:Spring通过BeanDefinition加载配置,支持构造器/工厂方法等多种实例化方式。核心关注依赖注入(推荐构造器注入)和循环依赖处理方案。为解决循环依赖,Spring采用三级缓存机制:一级缓存存放完整Bean,二级缓存存放未完成注入的半成品,三级缓存存放可能生成代理对象的工厂。当A依赖B而B又依赖A时,通过提前暴露半成品对象打破循环,同时确保AOP代理一致性。整个过程涵盖实例化、属性注入、初始化的完整生命周期,确保单例Bean的正确创建和管理。

Mars_cuixianghui的博客 1907

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring篇:IOC容器的加载过程

在上篇博文中我们已经对spring有了初步了解,本篇文章主要讲IOC容器的加载过程。

huihuidage的博客 1955

spring IOC 容器加载过程(部分)

spring IOC 容器加载过程 1.实例化容器:AnnotationConfigApplicationContext 2.实例化工厂DefaultListableBeanFactory 3.实例化BeanDefinition读取器: AnnotatedBeanDefinitionReader 4.实例化BeanDefinition 扫描器:ClassPathBeanDefinitionScanner 5.注册配置类为BeanDefinition: register(componentClasses) 6

weixin_44691279的博客 331

Spring父子容器加载过程描述

fycghy0803的专栏 442

加载spring容器和springmvc子容器的大致过程

加载spring容器和springmvc子容器的大致过程 1、启动tomcat等web容器,加载web.xml。 2、解析读取web.xml里的< context-param > 上下文参数,即spring容器,spring上下文的参数,通过< param-name > < param-value > 即key-value来指定spring容器的配置文件的位置...

Jobs1127的博客 514

Spring容器创建/加载过程

如果用配置文件,加载时会先调用自己的构造方法,里面包括一个父类的构造方法,一个setConfigLocation()方法,和一个refresh()方法 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); public ClassPathXmlApplicationContext(String configLocation) throws BeansException {

LMJudas的专栏 264

Spring-Ioc容器的加载过程

Spring 的 IOC 容器工作的过程,其实可以划分为两个阶段:和。

越努力越幸运。 748

5-spring ioc 容器的加载过程

Bean初始化:如果Bean实现了BeanNameAware, BeanFactoryAware, ApplicationContextAware等接口,相应的方法会被调用。Spring IOC容器的加载过程通常指的是Spring框架如何初始化和准备好Bean工厂以接受Bean定义并管理对象生命周期的过程。读取配置文件:Spring读取配置文件(XML或注解),并将这些信息转换为Spring内部的Bean定义。文件,并初始化Spring容器。Bean定义载入:Bean定义信息被注册到Bean定义注册表中。

weixin_41775999的博客 305

Spring源码:Spring IoC容器加载过程(1)

Spring源码版本:4.3.23.RELEASE 一、加载过程概览 Spring容器加载过程可以在org.springframework.context.support.AbstractApplicationContext#refresh方法看到总体过程,具体细节需要断点调试: 1 @Override 2 public void refresh() throws ...

weixin_30644369的博客 107
上一篇: redis设计与实现读书笔记——事务
下一篇: Redis常见面试问题
CCCCC_SSSSS
博客等级 码龄10年 3粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值