【初探Spring】——Spring IOC(二):初始化过程—简介

02.IOC容器加载过程及Bean的生命周期和后置处理器 Spring思维导图 SpringBean加载流 SpringIOC加载过程-invokeBeanFactoryPostProcessors SpringIOC 容器加载过程 第一步:实例化化容器:AnnotationConfigApplicationContext @Configuration @ComponentScan("cn.zhe") public class MainStartTest { public static void main(String[] args) { // Sprin 阅读详情

【初探Spring】——Spring IOC(二):初始化过程—简介

原创  2016年06月12日 18:33:30

首先我们先来看看如下一段代码

[java]  view plain  copy
  1. ClassPathResource resource = new ClassPathResource("bean.xml");  
  2.         DefaultListableBeanFactory factory = new DefaultListableBeanFactory();  
  3.         XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);  
  4.         reader.loadBeanDefinitions(resource);  

博友是否对这段简单代码记忆犹新呢? 这段代码是编程式使用IOC容器,通过这个简单的程序我们初步判定IOC容器的使用过程:

1、创建IOC配置文件的抽闲资源,也就是Resource接口。

2、创建BeanFactory,DefaultListtableBeanFactory是BeanFactory模式实现类。

3、创建一个BeanDefinitionReader对象,该对象为BeanDefinition的读取器。xml文件就使用XMLBeanDefinitionReader。

4、使用Reader来装载配置文件。loadBeanDefinitions就包括了资源文件的解析和注入过程。

通过上面四个步骤我们就可以轻松地使用IOC容器了,在整个过程可以剖析为三个步骤,这三个步骤也是IOC容器的初始化过程:Resource定位、载入、注册。如下:

Resource定位

我们一般使用外部资源来描述Bean对象,所以IOC容器第一步就是需要定位Resource外部资源。Resource的定位其实就是BeanDefinition的资源定位,它是由ResourceLoader通过统一的Resource接口来完成的,这个Resource对各种形式的BeanDefinition的使用都提供了统一接口。

载入

第二个过程就是BeanDefinition的载入。BeanDefinitionReader读取、解析Resource定位的资源,也就是将用户定义好的Bean表示成IOC容器的内部数据结构也就是BeanDefinition。在IOC容器内部维护着一个BeanDefinition Map的数据结构,通过这样的数据结构,IOC容器能够对Bean进行更好的管理。

在配置文件中每一个<bean>都对应着一个BeanDefinition对象。

注册

第三个过程则是注册,即向IOC容器注册这些BeanDefinition,这个过程是通过BeanDefinitionRegistery接口来实现的。在IOC容器内部其实是将第二个过程解析得到的BeanDefinition注入到一个HashMap容器中,IOC容器就是通过这个HashMap来维护这些BeanDefinition的。在这里需要注意的一点是这个过程并没有完成依赖注入,依赖注册是发生在应用第一次调用getBean向容器所要Bean时。当然我们可以通过设置预处理,即对某个Bean设置lazyinit属性,那么这个Bean的依赖注入就会在容器初始化的时候完成。

 

经过这三个步骤,IOC容器的初始化过程就已经完成了,后面LZ会结合源代码详细阐述这三个过程的实现。下面来看看与IOC容器相关的体系结构图,以ClassPathXmlApplicationContext为例(图片来自:【Spring】IOC核心源码学习(二):容器初始化过程)

左边黄色部分是 ApplicationContext 体系继承结构,右边是 BeanFactory 的结构体系。

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

相关推荐

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

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

AI乔治 938

MYSQL explain详解

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 虽然这篇文章我写的很长,但看起来真的不会困啊,真的都是干货啊!!!! 先解析一条sql语句,看出现什么内容 EXPLAINSELECTs.uid,s.username,s.name,f.email,f.mobile,f.phone,f.postalcode,f.address FROMuchome_spaceASs,uchome_spacefieldASf WHER...

Coder 9万+

【Python实战解析】从数据爬取到房价预测:一个完整的数据科学项目流程拆解

本文详细拆解了一个完整的Python数据科学项目流程,从爬取长沙二手房数据到房价预测模型构建。通过实战案例,介绍了数据爬取、清洗、可视化及模型优化的关键技巧,帮助开发者掌握Python在数据分析中的应用,提升程序开发能力。

weixin_30379531的博客 412

02.Ioc容器加载过程-Bean的生命周期源码深度剖析

spring IOC

weixin_43761434的博客 548

智能车轮腿组‘定点排雷’科目全解析:从雷区识别到姿态控制

本文深入解析了智能车竞赛轮腿穿越组‘定点排雷’科目的核心技术。从构建鲁棒的视觉识别系统,到融合编码器与IMU进行厘米级定位,再到实现框内高精度旋转的姿态控制,提供了一套完整的从感知到执行的闭环技术方案,助力参赛队伍攻克这一高难度科目。

weixin_29161719的博客 640

Cadence17.2 > Allegro > 检查PCB Layout信号线组等长

Cadence17.2 > Allegro > 检查PCB Layout等长和配线

DL_62532的专栏 1万+

Spring基本流程分析------IOC

参考视频:2021最新版Spring源码全家桶教程305集IDEA版通俗易懂——B站最全阿里P8级别的Spring源码架构师教程+mybatis源码精讲_哔哩哔哩_bilibili 关于Spring框架的介绍,网上有很多非常好的详细的文章,个人能力有限,只能使用博客记录一下自己目前了解的知识点了!有错误,欢迎指正! 本篇博客将大致介绍一下Spring框架的简单运行流程。 SpringIOC的流程大致如下: 1、先进行BeanFactory的创建 2、将xml中的信息通过BeanDefinit

qq_44730336的博客 306

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7687

Spring容器的初始化过程

https://blog.youkuaiyun.com/qq_39632561/article/details/83070140 1、Spring 容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配号Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。 2、内部工作机制 该图描述了Spring容器从加载配置文件到创建出一个完整Bean的作业流程: 1、ResourceLoader从存

liyanlei的专栏 1065

亿图图示(edrawmax中文版) v10.1.7pjb

edrawmax中文名叫做亿图图示,是一款非常棒的综合图形图表设计软件,既能实现流程图、架构图、工程图、思维导图等数百种专业领域图形图表的绘制,又能提供一个白板进行头脑风暴和任意编排,轻松实现数据和创意的可视化呈现。软件支持Windows、Mac、Linux及网络版,一端创作,多端同步,从而为跨端办公绘图提供新的解决方案,还兼容常用文档类的办公软件格式,包括图片、Office、PDF、Visio、Html、SVG等,尽可能的在文件格式这块满足用户多方面需求。软件支持创建260多种图表类型,拥有超过12500

qq_43293214的博客 1万+

168、OIS光学防抖系统设计:陀螺仪标定、音圈马达驱动与滚珠式/悬丝式结构选型

本文总结了OIS光学防抖系统设计中的关键问题与解决方案。作者通过实际案例指出,陀螺仪标定需重视零偏、灵敏度和温度补偿问题,音圈马达驱动需采用电流环控制并优化相位补偿。在机械结构选型方面,滚珠式适合大角度补偿但存在回差问题,悬丝式精度高但受重力影响,需根据应用场景选择。系统联调建议从开环到闭环逐步验证,注意陀螺仪与驱动频率匹配。最后给出5条经验建议:关注陀螺仪信噪比而非分辨率、预留标定余量、重视机械结构公差、配备专业调试工具、协调OIS与电子防抖的分工配合。文章强调OIS调试需针对不同模组特性进行反复测试与标

zzfmlxs的博客 46

2 IOC容器初始化过程

IOC容器的初始化分为三个过程实现: 第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水桶装水需要先找到水一样。 第二个过程是BeanDefinition的载入过程。这个载入过程是把用户定义好的Bean表示成Ioc容器内部的数据结构,而这个容器内部的数据结构就是BeanDefition。 第三

惟愿无事 9074

Allan方差这个工具,怎么把它用的更顺手?(附Allan方差、动态Allan方差代码)

本文详细说明了Allan方差和动态Allan方差的计算过程,并通过递归运算和时间序列选择两种算法提高动态Allan方差的计算效率。文末提供了快速动态Allan方差计算代码。

victoryqian528的博客 374

Spring容器IOC初始化过程—今天终于进行总结了

https://www.colabug.com/2539499.html 作为一个经常使用Spring的后端程序员,小编很早就想彻底弄懂整个Spring框架了!但它整体是非常大的,所有继承图非常复杂,加上小编修行尚浅,显得力不从心。不过,男儿在世当立志,今天就先从Spring IOC容器的初始化开始说起,即使完成不了对整个Spring框架的完全掌握,也不丢人,因为小编动手了,稳住,咱能赢! 下...

liyanlei的专栏 4004

达梦数据库修改最大连接数

达梦数据库的最大连接数推荐配置与服务器内存有关。不应设置得过大,否则容易导致出现OOM。文件中整型的参数值。DSC环境下,除了特殊参数以外,其他参数值会在OK节点上同步。返回值:当前DM.INI文件中对应的参数值。功能说明:返回DM.INI文件中。:DM.INI文件中的参数名。

Sebastien23的博客 3336

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring源码分析 之 Spring IOC容器初始化过程(一)资源定位过程

Spring IOC容器初始化过程(一)资源定位过程 最近复习了一遍Spring IOC容器的初始化过程,结合书籍《Spring源码深度解析》总结了一下,IOC容器的初始化过程,大概分为以下三点: 定位资源 定位相关的配置文件,扫描相关注解 加载资源 将配置信息加载到内存中 注册 根据载入的配置信息,初始化对象,并将其装载至容器中 整体加载的时序图 工程目录 POM文件 <?xml version="1.0" encoding="UTF-8"?> <project x

i_wonder_how_的博客 3608

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Spring——Spring IOC容器初始化过程

Spring IOC容器的初始化简单的可以分为三个过程: 第一个过程是Resource资源定位。这个Resouce指的是BeanDefinition的资源定位。这个过程就是容器找数据的过程,就像水桶装水需要先找到水一样。(将xml, db.properties等文件打包成一个BeanDefinition) 第二个过程是BeanDefinition的载入过程。这个载入过程是把用户定义好的Bean表...

Stay Hungry Stay Foolish 1083

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring源码-IOC初始化过程

spring ioc初始化源码分析

Filwaod 1761

Spring 面试之 IOC 初始化过程

相信大家都知道Spring,我们经常来用他一些特性,比如说他的AOP,IOC,那今天就带大家解析下SpringIOC的加载过程。 我们来看一个例子 AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(JobService.class); for (String bea...

我的博客 2365

Spring IOC容器初始化过程深度解析

Spring支持多种配置方式,包括XML配置、注解配置和Java配置类。无论采用哪种配置方式,Spring最终都会将配置信息转换为统一的对象,这是Spring管理Bean的核心数据结构。资源加载过程由接口实现,该接口提供了方法来获取资源。Spring为提供了多种实现,如(从类路径加载资源)、(从文件系统加载资源)和(从URL加载资源)。在Spring Boot应用中,资源加载策略通常与应用程序上下文类型一致,例如使用加载资源。XML配置解析:由负责加载XML文件,通过解析XML文档中的<bean>

weixin_45422672的博客 1233

Spring学习--IOC容器的初始化过程

IOC容器初始化概述 IOC容器初始化是由refresh()

m0_47954009的博客 2292

Spring中IOC容器初始化过程解析

本篇文章主要解析spring框架ioc容器初始过程,包含启动过程中,涉及到的一些类,ApplicationContext继承体系,以及各个部分涉及到的一部分功能,BeanFactory继承体系 对比着之前设计的ioc上差别部分,功能更加全面;本篇文章主要是解析其源码,而不是单纯的记那是那里,而是理解设计思路才是最重要的。

踩踩踩从踩的博客 1988

3.Spring 源码解读—IOC容器初始化过程

自1.1.3版本提供的抽象实现,提供bean工厂刷新方法的实现,可以配置是否允许重写bean定义以及循环依赖。AbstractRefreshableConfigApplicationContext子类则增加了资源配置入口,通过Environment解析出配置的真实资源路径字符串。它的子类实现是指定了资源的加载方式,比如XML资源方式的子类实现:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext。

RubyWinner的博客 1064

Spring进阶- Spring IOC实现原理详解之IOC初始化流程

上文,我们看了IOC设计要点和设计结构;紧接着这篇,我们可以看下源码的实现了:Spring如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的。

qq_63353796的博客 1041

Spring进阶- Spring IOC实现原理(二)IOC初始化流程

AbstractBeanDefinitionReader的loadBeanDefinitions方法源码如下:这个类并不是加载 xml 的过程,它是创建了一个 Resource 对象,分派 Resource 对象给子类来加载 Bean.@Override// 模式匹配类型的解析器,这种方式是加载多个满足匹配条件的资源try {// 获取到要加载的资源// 委派调用其子类XmlBeanDefinitionReader的方法,实现加载功能= null) {else {

CoFFee________的博客 1229
上一篇: 【初探Spring】——Spring IOC(一)
下一篇: spring之BeanFactory
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值