Spring源码分析总结(一)-IOC容器初始化

Spring IOC初始化过程 Spring IOC初始化过程——源码解读 Spring IOC的核心是BeanFactory 其实SpringIOC初始化的过程就是准备好BeanFactory的过程。 (1)定位并获取资源文件 ClassPathResource res = new ClassPathResource("my/applicationContext.xml"); 因为对象和对象之间的关系存储在xml或p 阅读详情

 

一、IOC容器的初始化过程

       IOC容器的初始化是由refresh()方法启动。经常使用的ApplicationContext 有:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext、XmlWebApplicationContext等。都有refresh()方法。

                     

              refresh()方法的这个启动分为三个基本过程:

	/**
	 * Create a new ClassPathXmlApplicationContext with the given parent,
	 * loading the definitions from the given XML files.
	 * @param configLocations array of resource locations
	 * @param refresh whether to automatically refresh the context,
	 * loading all bean definitions and creating all singletons.
	 * Alternatively, call refresh manually after further configuring the context.
	 * @param parent the parent context
	 * @throws BeansException if context creation failed
	 * @see #refresh()
	 */
	public ClassPathXmlApplicationContext(
			String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
			throws BeansException {

		super(parent);
		setConfigLocations(configLocations);
		if (refresh) {
			refresh();
		}
	}	
public abstract class AbstractApplicationContext extends DefaultResourceLoader
		implements ConfigurableApplicationContext {
  
  
@Override
	public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			//准备刷新的上下文环境 Prepare this context for refreshing.
			prepareRefresh();

			//初始化BeanFactory,并进行xml文件读取 Tell the subclass to refresh the internal bean factory.
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

			//对BeanFactory进行各种功能填充 Prepare the bean factory for use in this context.
			prepareBeanFactory(beanFactory);

			try {
				//子类覆盖方法做额外的处理Allows post-processing o
Spring的IOC容器初始化源码分析三:refresh(01) SpringIOC 容器对 Bean 定义资源的载入是从 refresh()函数开始的,refresh()是一个模板方法, refresh()方法的作用是:在创建 IOC 容器前,如果已经有容器存在,则需要把已有的容器销毁和关闭, 以保证在 refresh 之后使用的是新建立起来的 IOC 容器。refresh 的作用类似于对 IOC 容器的重启, 在新建立好的容器中对容器进行初始化,对 Bean... 阅读详情

相关推荐

Spring MVC源码分析——初始化过程

1.      概述 对于Web开发者,MVC模型是大家再熟悉不过的了,SpringMVC中,满足条件的请求进入到负责请求分发的DispatcherServlet,DispatcherServlet根据请求url到控制器的映射(HandlerMapping中保存),HandlerMapping最终返回HandlerExecutionChain,其中包含了具体的处理对象handler(也即我们编程

看看写写,记录所学,权当笔记の 3万+

MySQL流式查询的奥秘与应用解析

很久没写开篇了,针对大数据采集分析和导出等功能,我们必须在内存和性能上做好折中,这其中笔者最爱的就是流式查询,而本文将基于多个角度针对流式查询这技能进行深入的分析和演示,希望对你有帮助。磁盘每秒的读写次数,一般以每秒输入输出量为单位进行衡量。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注。

禅与计算机程序设计的艺术 1417

怎么使用DeBug深入源码

Debug深入了解源码

wangligong的博客 4005

Spring中的工厂模式:BeanFactory、FactoryBean与@Bean解析

设计模式中的工厂模式是解耦对象创建与使用的核心思想,在Spring框架中体现得淋漓尽致。Spring的IoC容器本质上就是一个大型工厂,负责Bean的实例化、装配与生命周期管理。从底层的BeanFactory到功能完备的ApplicationContext,从静态工厂方法到FactoryBean接口,再到注解驱动的@Bean,Spring提供了多种创建Bean的方式,帮助企业级应用实现灵活拓展与高效维护。在实际开发中,理解工厂模式有助于解决循环依赖、单例失效等问题。通过源码跟踪getBean流程,可以深入理

weixin_31412781的博客 215

spring IOC源码分析(1)

1.何谓Spring IOC         何谓Spring IOC?书上谓之“依赖注入”,那何谓“依赖注入”?         作为一个Java程序猿,应该遇到过这样的问题,当你在代码中需要使用某个类提供的功能时,你首先需要new一个对象,给它传递必要的参数,然后才能使用它提供的功能,最后释放对象占用的内存,当然了这个在Java不需要你自己去干了。这也就是说你需要自己去管理变量的整个生命周

看看写写,记录所学,权当笔记の 2万+

深入理解 Spring IOC 底层实现机制(refresh 方法源码分析)

/IOC 核心方法//防止 启动和销毁并发执行//启动步骤记录//刷新准备工作//创建 beanFactory 将配置文件解析为 beandefiniton 对象 注册到 beanFactory 中//ConfigurableListableBeanFactory是一个接口 真正干活的是 DefaultListableBeanFactory//beanFactory 预处理 主要是设置 beanFactory 类加载器及忽略一些自动装配 设置一些默认benatry {

weixin_42118323的博客 1758

132面试必问:说说Spring容器IOC初始化过程

更多面试题:面试题内容聚合 一、老规矩,先比比点幺蛾子 作为一个经常使用 Spring 的后端程序员,小编很早就想彻底弄懂整个 Spring 框架了!但它整体是非常大的,所有继承图非常复杂,加上小编修行尚浅,显得力不从心。不过,男儿在世当立志,今天就先从 Spring IOC 容器的初始化开始说起,即使完成不了对整个 Spring 框架的完全掌握,也不丢人,因为小编动手了,稳住,咱能赢! 下面说一些阅读前的建议: 1、阅读源码分析是非常无聊的,但既然你进来了,肯定也是对这个东西进行了解,也...

AI乔治 938

Spring IoC 源码分析 (基于注解) 一

一、 IoC 理论 IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。 二、IoC方式 Spring为IoC提供了2种方式,一种是基于xml,另一种是基于注解。 标签来定义bean,进行管理。 @Bean注解来定义bean,进行管理。 本次文章我们就来分析下基于注解的IoC原理,在看文章之前我们可以带一些疑问,这样有助于我们更好的理解。 @Bean是干什么用的? @Controller、@Se

weixin_48013460的博客 475

Spring IoC 源码系列(一)BeanDefinition 初始化与注册

一、BeanDefinition 1.1 什么是 BeanDefinition 在一般的 Spring 项目中,主要通过 XML 的方式配置 bean,而 BeanDefinition 就是 XML 配置属性的载体,XML 文件首先会被转化成 Document 对象,通过解析 Document,把 XML 中 <bean /> 标签转化成 BeanDefinition 供 IoC 容器...

点滴记录 1030

Spring IOC 源码解析

在 Spring 中,IOC(Inversion of Control)容器管理着 Bean 的整个生命周期。了解这些生命周期阶段和相应的源码分析,能够帮助我们深入理解 Spring 的核心机制,以及如何在不同阶段增加扩展点以优化和自定义我们的应用。Spring Bean 的生命周期通常可以划分为以下几个阶段:在每个阶段,Spring 提供了多个扩展点,允许开发者在不同的生命周期阶段插入自定义的逻辑,这为开发者提供了高度的灵活性。在 Spring 中,Bean 实例化的核心工作由 的 方法完成。实例化过

编程神经元的博客 914

12-Spring架构源码分析-IoC 之装载 BeanDefinitions 总结

前面 从源码层次,分析了 IoC BeanDefinition 装载的整个过程,这篇就这些内容做一个总结将其连贯起来。在前文提过,IoC 容器的初始化过程分为三步骤:Resource 定位、BeanDefinition 的载入和解析,BeanDefinition 注册。整体步骤Resource 定位。我们一般用外部资源来描述 Bean 对象,所以在初始化 IoC 容器的第一步就是需要定位这个外部资源。在上一篇《IoC 之 Spring 统一资源加载策略》已经详细说明了资源加载的过程。...

Java架狗师知识框架速查表 255

6-Spring架构源码分析-IoC 之加载 BeanDefinition

在IoC容器内部其实是将第二个过程解析得到的BeanDefinition注入到一个HashMap容器中,IoC容器就是通过这个HashMap来维护这些BeanDefinition的。BeanDefinitionReader读取、解析Resource资源,也就是将用户定义的Bean表示成IoC容器的内部数据结构BeanDefinition。这段代码是Spring中编程式使用IoC容器,通过这四段简单的代码,我们可以初步判断IoC容器的使用过程。...

Java架狗师知识框架速查表 332

Spring 源码分析(2)--SpringIoC源码分析

SpringIoC 初始化整体流程的跟踪,篇幅较长,耐心看完,肯定有惊喜。

aidaowuqiong的博客 722

Spring源码解析-Spring IOC

IOC 不是⼀种技术,只是⼀种思想,⼀个重要的⾯向对象编程的法则,它能指导我们如何设计出松耦合、更优良的 程序。传统应⽤程序都是由我们在类内部主动创建依赖对象,从⽽导致类与类之间⾼耦合,难于测试。有了 IOC 容器后,把创建和查找依赖对象的控制权交给了容器,由容器进⾏注⼊组合对象,所以对象与对象之间是 松散耦合,便于测试和功能复⽤,整个体系结构更加灵活。理解 IOC 的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些⽅⾯反转了”谁控制谁,控制什么。

xxxzzzqqq_的博客 240

4-Spring架构源码分析-Spring IOC机制设计思想和源码解读

被注入的对象需要什么,直接跟IoCServiceProvider打声招呼,后者就会把相应的被依赖对象注入到被注入的对象中,从而达到IoCServiceProvider为被注入对象服务的目的。相比于构造器注入,setter方式注入会显得比较宽松灵活些,它可以在任何时候进行注入(当然是在使用依赖对象之前),这就好比你可以先把自己想要的妹子想好了,然后再跟婚介公司打招呼,你可以要林志玲款式的,赵丽颖款式的,甚至凤姐哪款的,随意性较强。,用来描述Spring中的Bean对象。...

Java架狗师知识框架速查表 229

我的架构梦:(五)Spring框架中的IoC容器源码分析(上)

一、Spring IoC基础 1、bean与BeanFactory的关系 2、BeanFactory与ApplicationContext区别 BeanFactory是Spring框架中IoC容器的顶层接口,它只是用来定义一些基础功能,定义一些基础规范,而 ApplicationContext是它的一个子接口,所以ApplicationContext是具备BeanFactory提供的全部功能的。 通常,我们称BeanFactory为Spring IoC的基础容器,ApplicationContext是容器

riemann_的博客 945

揭秘 Java Spring 的 IoC 容器

本文旨在深入解析Spring框架中IoC容器的工作原理和实现机制。我们将从设计理念出发,逐步深入到具体实现,帮助开发者理解Spring的核心机制,并掌握其最佳实践。文章首先介绍IoC的基本概念,然后深入分析Spring容器的实现原理,接着通过源码解读展示具体实现,最后讨论实际应用和优化策略。: 控制反转,一种设计原则,将对象的创建和依赖管理从应用程序代码转移到框架或容器: 依赖注入,IoC的一种实现方式,通过外部注入依赖对象Bean: Spring容器管理的对象实例。

Java大师兄的博客 964

麒麟V10服务器多硬盘安装与分区实战:告别自动分区,手动分配/boot、swap和/根目录

本文详细介绍了麒麟V10服务器在多硬盘环境下的手动分区策略,包括/boot、swap和/根目录的优化分配方案。通过SSD与HDD混合存储架构的合理规划,提升系统性能和运维效率,适用于企业级定制化系统部署需求。

weixin_26976635的博客 407

STM32F030F4P6实战:LL库+DMA驱动WS2812全流程(附避坑指南)

本文详细介绍了如何使用STM32F030F4P6的LL库和DMA驱动WS2812 LED灯带的全流程,包括硬件选型、CubeMX配置、LL库与DMA关键实现、数据格式转换及调试技巧。特别提供了避坑指南,帮助开发者避免常见错误,提升开发效率。

weixin_29194693的博客 484

【人工智能】大模型可以分为L0层:基础大模型/通用大模型、L1层:行业大模型、L2层:细分场景模型三个层级

大模型确实可以分为L0、L1、L2三个层级,这种分层架构不仅有助于提升模型的泛化能力和适应性,还能更好地满足不同行业和场景的需求。华为盘古大模型的分层架构(L0、L1、L2)在多个证据中得到了详细描述和验证。例如,华为云盘古大模型3.0明确分为L0基础大模型、L1行业大模型和L2场景模型三层架构。此外,其他来源也一致支持这一分层架构,如用友网络的企业服务大模型、智谱AI的GLM-4系列等。

奶爸的编程之路,也就一周冷个三天 3982

C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取

本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1323

OpenCV实战系列——图像线条提取

基于内容的图像分析,需要从构成图像的像素集合中提取有意义的特征。轮廓、线条、区域等是基本的图像基元,可用于描述图像中包含的元素。本节将介绍如何提取重要的图像线条特征。

m0_58523831的博客 1万+

109. 使用 SAP UI5 FileUploader 控件上传本地文件

我们可以使用SAPUI5提供的控件,将本地文件上传到远端服务器进行存储。远端服务器负责接收上传的文件的逻辑,可以采取Java,Node.js或者ABAP等任意的编程语言实现。本地文件上传也是最终用户同文件服务器交互的重要手段之一,因此文件上传这个主题,本教程会通过若干篇文章连续进行介绍。笔者还另外实现了一个不通过SAPUI5FileUploader控件,而是直接用HTML原生的input。先看本步骤完成后实现的场景。本步骤完整的源代码位置。进入目录109,运行命令行。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2236

组态王与DLT645-2007电能表通讯调试总结

组态王与电力协议DLT 645-2007调试总结 DLT 645-2007是多功能电能表通信协议,该标准由中国电力企业联合会2006年提出,该协议为主-从结构的半双工通信方式。手持单元或其它数据终端为主站,多功能电能表为从站。每个多功能电能表均有各自的地址编码。通信链路的建立与解除均由主站发出的信息帧来控制。帧是传送信息的基本单元,每帧由帧起始符、从站地址域、控制码、数据域长度、数据域、帧信息纵向校验码及帧结束符7个域组成,每部分由若干字节组成,帧格式如图1所示。 1.确定设备地址 地址域由 6 个字节构

逍遥子的博客 1万+

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2928

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: ModuleNotFoundError: No module named ‘PIL‘
下一篇: Spring源码分析总结(二)-Spring AOP 解析aop:aspectj-autoproxy
Jacabe博客-编程
博客等级 码龄12年 320粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值