[Spring]new ClassPathXmlApplicationContext("application.xml")做了些什么

SAP Business One自定义表与字段实战:从零构建企业专属数据模型 本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。 阅读详情

这里需要贴两张图 ClassPathXmlApplicationContext 继承关系树



这张图实际没画全,最上层为

DefaultResourceLoader,该类设置classLoader,并且将配置文件 封装为Resource文件  Resrource根据传入的路径的前缀来判断采取何种封装。

AbstractApplicationContext,该类完成了大部分的IOC容器初始化工作,同时也提供了扩展接口留给子类去重载。该类的refresh()函数是核心初始化操作。

AbstractRefreshableApplicationContext,该类定义了是否允许bean在运行时是否重新定义,以及包含了beanFactory。该类主要是和beanFactory打交道。

AbstractRefreshableConfigApplicationContext,该类保存了配置文件路径

AbstractXmlApplicationContext:该类封装了如何读取Resource封装的配置

最后ClassPathXmlApplicationContext:只提供了一个简单的构造函数

Spring 将类职责分开,形成职责链,每一层次的扩展 都只是添加了某个功能

然后父类定义大量的模板,让子类实现,父类层层传递到子类 知道某个子类重载了抽象方法。这里应用到了职责链设计模式和模板设计模式,IOC是个容器工厂设计模式。

IOC容器的行为也跟其组件有关,这可以认为是策略模式。





现在根据这个调用流程图 我们大概就可以了解到 Spring容器初始化的最主要的工作就是refresh()函数所做的


AbstractApplicationContext:refresh()函数

	@Override
	public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// Prepare this context for refreshing.
			prepareRefresh();

			// Tell the subclass to refresh the internal bean factory.
			ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

			// Prepare the bean factory for use in this context.
			prepareBeanFactory(beanFactory);

			try {
				// Allows post-processing of the bean factory in context subclasses.
				postProcessBeanFactory(beanFactory);

				// Invoke factory processors registered as beans in the context.
				invokeBeanFactoryPostProcessors(beanFactory);

				// Register bean processors that intercept bean creation.
				registerBeanPostProcessors(beanFactory);

				// Initialize message source for this context.
				initMessageSource();

				// Initialize event multicaster for this context.
				initApplicationEventMulticaster();

				// Initialize other special beans in specific context subclasses.
				onRefresh();

				// Check for listener beans and register them.
				registerListeners();

				// Instantiate all remaining (non-lazy-init) singletons.
				finishBeanFactoryInitialization(beanFactory);

				// Last step: publish corresponding event.
				finishRefresh();
			}

			catch (BeansException ex) {
				if (logger.isWarnEnabled()) {
					logger.warn("Exception encountered during context initialization - " +
							"cancelling refresh attempt: " + ex);
				}

				// Destroy already created singletons to avoid dangling resources.
				destroyBeans();

				// Reset 'active' flag.
				cancelRefresh(ex);

				// Propagate exception to caller.
				throw ex;
			}

			finally {
				// Reset common introspection caches in Spring's core, since we
				// might not ever need metadata for singleton beans anymore...
				resetCommonCaches();
			}
		}
	}

事实上 我们看到的这些方法 可以认为是一种模板设计模式  里面有些方法 并没有实现 只是一个在AbstractApplicationContext所定义的抽象方法,这些抽象方法直到某一子类才得以实现。一般refresh()函数调用完成 那么ioc容器也就进入了可以使用的阶段。





【知识分享】IBIS 建模指南 04 文章详细阐述了将缓冲器数据转换为IBIS模型格式的核心步骤与规范要求。主要内容包括:1)IBIS文件三大结构(文件头信息、组件引脚映射、缓冲器行为描述)及其关键词定义;2)四种关键I-V表(上下拉、电源/地钳位)的数据处理规则,强调需避免重复计算效应;3)切换特性描述方法,指出V-T波形表优于Ramp数据的三大优势;4)差分缓冲器通过[DiffPin]关键词实现建模的特殊流程。文中特别强调数据外推校验、参考电压基准转换、工艺角数据排序等易错环节的处理技巧,为创建符合IBIS 4.0规范的精确模型提供指导。 阅读详情

相关推荐

Docker小白也能搞定!5分钟用calibre-web搭建私人Kindle书库(附静读天下配置)

本文为零基础用户提供了一份详尽的指南,介绍如何利用Docker容器技术,在5分钟内快速部署Calibre-Web服务,从而搭建一个完全私有的个人Kindle书库。教程涵盖了从Docker安装、Calibre-Web一键部署、书籍元数据管理到移动端配置的全流程,并重点讲解了如何与安卓端知名阅读应用“静读天下”联动,实现跨设备无缝访问,打造媲美在线书城的个性化阅读体验。

weixin_29216957的博客 540

Spring 中 ClassPathXmlApplicationContext 类的简单使用

原文地址:http://www.blogjava.net/xcp/archive/2011/06/22/352821.html 一、简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: ApplicationContext ac = new ClassPathXmlApplicationContext("applicationCon...

kaven 4万+

思科模拟器汉化教程(附带中文汉化包)

思科模拟器是一种模拟Cisco网络设备的软件工具。它可以模拟Cisco网络设备的所有功能,包括路由器、交换机、防火墙等,并提供了一个可视化的用户界面,让用户可以通过图形化的方式来管理网络设备。思科模拟器因其便捷、易用的特点被广泛应用于网络工程师的实验、测试和培训等方面思科模拟器的功能是强大的,但当我们在使用思科模拟器的时候就会有一些烦恼,由于思科是全球最大的企业级网络设备供应商之一。思科公司的产品和服务被广泛应用于各种领域和行业,所以思科模拟器默认是全英文的,但是在最新版本中是支持中文的。

2302_76908369的博客 4万+

SpringMVC

SpringMVC Spring与Web环境集成 springboot 添加webapp目录-百度经验 (baidu.com) ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件)方式获取的,但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(spring配置文件) ,这样的弊端是配置文件加载多次,应用上下文对象创建多次,影响性能。 C

weixin_43164309的博客 568

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

异常数据处理——3σ原则、箱线图

异常数据处理——3σ原则、箱线图 用不包括异常值的剩余数据的均值替换、删除DataFrame中某列有异常值的整行等方法

杨老师的小跟班(*∩_∩*) 9032

Spring的XML文件自定义标签

Spring的XML文件自定义标签

qq_51274370的博客 443

Unraid小白必看:5分钟搞定OpenWrt软路由安装(附iStoreOS配置技巧)

本文为Unraid新手提供了一份详尽的OpenWrt软路由安装与配置指南。通过虚拟机技术,在Unraid系统上快速部署基于iStoreOS的软路由,详细讲解了旁路由与主路由两种模式的网络配置、性能优化技巧及常见故障排查方法,帮助用户充分利用闲置硬件,打造高性能、可定制的家庭网络中枢。

wine的专栏 484

spring 源码解读一 ClassPathXmlApplicationContext

最近闲来无事翻阅了下spring的源码,在此记录下心得体会 spring 是一个ioc框架,我们要进行spring相关的源码阅读最好的入口就是ClassPathXmlApplicationContext 通过以下代码正式进入spring的源码世界: ApplicationContext applicationContext = new ClassPathXmlApplicationContext("myApplicationContext.xml"); 它的类图结构如下: 我们通过d...

luhaichuan88的博客 702

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 481

通过实例讲解瀑布模型

在电子商城开发中,瀑布模型如同 “工业时代的流水线”—— 能通过标准化流程交付高质量、高合规性的系统,但也可能因缺乏灵活性而错失市场机会。其优势与缺点本质上源于同一核心特征:严格的阶段性与文档驱动。决策建议若开发传统型、长周期、需求固定的电子商城(如企业内部采购平台),可优先选择瀑布模型,并通过 “需求预验证 + 模块化设计” 降低风险;若开发创新型、短周期、需快速迭代的电商平台(如社交电商、跨境电商),建议采用敏捷模型或混合模型(如瀑布 + Scrum),平衡规范性与响应速度。

跟佟格湾一起学习计算机知识吧~ 271

慎用 new ClassPathXmlApplicationContext("application

BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml") ; 在利用Spring的时候我们经常能要写上边这段代码 但是有些粗心的程序员 会毫无考虑的 在程序中写成上边那样   写的地方无外乎构造函数 或者程序里边用到的地方 殊不知这样写 很可能会造成JVM栈区溢出 原因很简单 new Cl...

Object 326

【CAN总线测试】——使用VH6501 进行Busoff快慢恢复测试

即在IDBase中填标准帧11位二进制ID,如果不满11位,高位补零,凑齐11位,并将下方CurrTriggerField设置干扰前一位AckSlot位,Triggeroffset设置为0。首先确认环境支持VN6501,6501硬件连接成功后,工程的小闪电是正常黄色状态,若是灰色证明缺少License,或者软件安装环境不正确。填写干扰报文ID、干扰位置 注意这里的干扰位置是实际干扰的前一位,TriggerOffset表示偏移量,可以干扰某个字节的具体位.找到并打开Panel后,开启工程,并且配置面板。

LOVE135149的博客 5629

Spring源码—初识IOC

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml"); 这句代码发生了什么?

代码不会敲的博客 426

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SpringIoc源码解析

以前自以前写的博客:https://segmentfault.com/a/1190000020017316。

分享日常学习和工作中遇到的技术难点 306

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

手写Spring(一)IOC之ClassPathXmlApplicationContext

1.BeanDefinitionRegistry 2.BeanDefinitionReader 3.AbstractApplicationContext

Xiaoweidumpb 422

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Spring框架的测试和ClassPathXmlApplicationContext类的简单使用

在项目中引入Spring框架以后,我们一般会测试一下Spring框架导入是否成功。这时我们需要简单的配置一下Spring: 首先,显示在Spring的配置文件applicationContext.xml中进行用于测试的bean的配置: 当然,需要有一个domain与之对应: public class TestService { private String name;

705

Spring中ClassPathXmlApplicationContext用遇到的简单问题

一、简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); RegisterDAO registerDAO = (RegisterDAO)ac.getBean("R

格色情调的博客 1万+

【大白话说Java面试题 第144题】【06_Spring篇】第4题:Spring 中有多少种 IOC 容器?

摘要: Spring的IOC容器并非简单的两种类型,而是一个多层接口与实现类组成的体系。核心接口为BeanFactory(基础功能)和扩展企业级特性的ApplicationContext,后者通过多种实现类支持不同配置方式: XML配置:如ClassPathXmlApplicationContext(类路径XML)、FileSystemXmlApplicationContext(文件系统XML); 注解/JavaConfig:如AnnotationConfigApplicationContext(独立应用)

Java后端 | AI智能体应用实战派 | 电脑技能行家 352

spring application.xml在项目中的几种解析方式

解析 在java项目中的spring applicationContext.xml文件的几种解析方式: 一种: ApplicationContext cxt = new ClassPathXmlApplicationContext(“applicationContext.xml”); cxt.getBean(“在applicationContext.xml中bean的id”); 二

Codelong的专栏 1027

Spring中ClassPathXmlApplicationContext类的简单使用

一、简单的用ApplicationContext做测试的话,获得Spring中定义的Bean实例(对象).可以用: ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); RegisterDAO registerDAO = (RegisterDAO)ac.getBean("Reg

lzm18064126848的专栏 495

Spring IoC容器原理与XML配置实战指南

控制反转(IoC)是Spring框架的核心设计思想,通过将对象创建和依赖管理的控制权交给容器,显著降低了组件耦合度。其实现基于工厂模式和反射机制,容器启动时解析配置元数据,构建依赖图谱并完成属性注入。作为Java企业级开发的基础设施,Spring IoC容器支持XML和注解两种配置方式,其中XML配置虽然逐渐被注解取代,但在维护遗留系统和理解底层原理方面仍具价值。典型的应用场景包括依赖注入、Bean生命周期管理以及模块化配置,开发者需要掌握setter注入、构造器注入等核心技巧,同时注意处理循环依赖等常见问

weixin_30698297的博客 539

Spring5 IOC容器原理与XML配置实战指南

控制反转(IOC)是Spring框架的核心设计原则,通过将对象创建和依赖管理的控制权交给容器,实现了组件间的解耦。其工作原理基于依赖注入(DI)模式,支持构造器注入、Setter注入等多种方式,大幅提升了代码的可测试性和可维护性。在Java企业级开发中,Spring IOC容器常被用于管理服务层组件、数据访问对象等核心业务元素。XML配置作为传统配置方式,仍然在遗留系统维护和灵活配置场景中发挥重要作用,支持完整的Bean生命周期管理、作用域控制和模块化配置。结合Spring5的优化特性如并行解析、循环依赖检

weixin_33850890的博客 394

Spring MVC 项目中使用 @Value 注解读取 Properties 配置的完整指南

【摘要】本文解决了SpringMVC项目中@Value注解读取properties配置为null的问题。关键点包括:1)配置类需添加@Component注解并由Spring管理;2)在applicationContext.xml中配置组件扫描和属性文件加载;3)业务代码必须通过@Resource/@Autowired注入Bean而非直接new对象。测试通过但业务代码失败的原因是直接创建对象绕过了Spring依赖注入机制。文中还提供了处理注册表权限警告的方法(手动创建HKEY_LOCAL_MACHINE\So

ywl470812087的博客 12万+

Spring系列——两万字长文教会你Spring (超详细!!!)

到此,我们学习完了 Spring 框架,包括: Spring 体系结构 Spring Bean Spring AOP Spring JDBC Spring 事务管理 写此文章是为了做个笔记,等以后自己忘记了可以回头快速上手。同时也分享给小伙伴们,希望我们都能越来越好,不会就学 B 站,不懂就问 AI,总好过自己两耳不闻窗外事的独自琢磨。 最后认识一下吧,笔者叫`北迁`,hhh~~。

weixin_63009611的博客 1181

Java类中加载Spring中的ApplicationContext.xml文件的方式

<1>、利用ClassPathXmlApplicationContext,可以从classpath中读取XML文件  //读取一个文件   1. ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");   UserDAO userDAO= (UserDAO )co...

qq_19316267的博客 1097
上一篇: [linux]程序和进程浅析
下一篇: [Spring]Spring Bean的初始化 ---- getBean方法
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值