news 2026/5/1 6:18:31

SpringBean实例化的基本流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBean实例化的基本流程

SpringBean实例化的基本流程

一、原理

Spring 容器在进行初始化时,会将 xml 配置的<bean>的信息封装成一个 BeanDefinition 对象,所有的BeanDefinition 存储到一个名为beanDefinitionMap的 Map 集合中去,Spring 框架在对该 Map 进行遍历,使用反射创建 Bean 实例对象,创建好的 Bean 对象存储在一个名为singletonObjects的 Map 集合中,当调用getBean方法时则最终从该 Map 集合中取出 Bean 实例对象返回。

二、实验部分

2.1验证 BeanDefinition 是存储bean标签的信息

applicationContext.xml:

<?xml version="1.0"encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao"class="com.itheima.dao.impl.UserDaoImpl"></bean><bean id="userService"class="com.itheima.service.impl.UserServiceImpl"></bean></beans>
packagecom.itheima.test;importcom.alibaba.druid.pool.DruidDataSource;importcom.itheima.dao.impl.UserDaoImpl;importcom.itheima.service.UserService;importcom.mysql.jdbc.Connection;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.springframework.beans.factory.support.DefaultListableBeanFactory;importorg.springframework.beans.factory.xml.XmlBeanDefinitionReader;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importjavax.xml.bind.annotation.XmlAccessOrder;importjava.io.IOException;importjava.io.InputStream;importjava.sql.DriverManager;publicclassBeanFactoryTest{publicstaticvoidmain(String[]args)throwsException{ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext_beanfac.xml");UserServiceuserService=(UserService)applicationContext.getBean("userService");}}

此时由于xml中的userService没有传入属性,所以beanDefinitionMap中它的propertyValues为0:

加入property属性时:

<?xml version="1.0"encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao"class="com.itheima.dao.impl.UserDaoImpl"></bean><bean id="userService"class="com.itheima.service.impl.UserServiceImpl"><property name="userDao"ref="userDao"/></bean></beans>

当然有更多的属性就不再一一演示了,详细的可以看下面这个图:

2.2源码剖析

依据信息找到源码可见beanFactory内部确实是维护着singletonObjects的 Map 集合。

三、总结

3.1详细流程

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 3:25:59

MATLAB小波交叉功率谱分析源代码实现

一、核心代码框架 基于MATLAB小波工具箱&#xff08;Wavelet Toolbox&#xff09;&#xff0c;实现两个时间序列的小波交叉功率谱分析&#xff0c;包含数据预处理、参数设置、交叉谱计算及可视化。 %% 1. 数据加载与预处理 % 加载两个时间序列数据&#xff08;示例&#xff1…

作者头像 李华
网站建设 2026/4/16 12:38:55

基于MATLAB的延迟求和(DAS)波束形成算法实现

一、算法原理 延迟求和&#xff08;Delay and Sum, DAS&#xff09;是波束形成的基础算法&#xff0c;通过调整各阵元信号的时间延迟&#xff0c;使目标方向信号相位对齐后叠加增强&#xff0c;抑制其他方向噪声。其核心公式为&#xff1a;其中&#xff1a; xm(t)x_m(t)xm​(t)…

作者头像 李华
网站建设 2026/4/29 17:30:30

学长亲荐8个一键生成论文工具,研究生轻松搞定论文写作!

学长亲荐8个一键生成论文工具&#xff0c;研究生轻松搞定论文写作&#xff01; 论文写作的“加速器”&#xff1a;AI 工具如何改变研究生的学习节奏 在当今学术研究日益复杂的背景下&#xff0c;研究生们面对的不仅是繁重的课程任务&#xff0c;还有论文写作带来的巨大压力。…

作者头像 李华
网站建设 2026/4/28 20:00:19

职场晋升简历怎么制作?专属模板下载+HR认可技巧

求职场景不同&#xff0c;简历难题却同样棘手&#xff1f;职场晋升想更新简历&#xff0c;却不会突出管理能力和项目成果&#xff1b;想做兼职&#xff0c;不知道如何平衡主业与兼职经历、突出适配技能&#xff1b;理科应届生不会量化实验成果&#xff0c;文科应届生难以体现文…

作者头像 李华
网站建设 2026/4/10 21:23:57

日常证件照怎么压缩?符合办事提交要求的 3 个方法

办理社保、居住证、线上办事提交材料时&#xff0c;你是不是总遇到这些问题&#xff1f;证件照上传提示 “文件过大”&#xff0c;尺寸不符合系统要求&#xff0c;找不到简单的修改方法&#xff0c;担心改完不符合标准被退回。日常办事证件照多要求 JPG 格式&#xff0c;常见尺…

作者头像 李华
网站建设 2026/4/23 11:35:48

【从零手搓128GB显存GPU:我的节能能效探索之旅】

从零手搓128GB显存GPU&#xff1a;我的节能能效探索之旅 当显卡价格高企&#xff0c;我决定亲手打造一块属于自己的大显存节能GPU 动机&#xff1a;为什么我要“手搓”GPU&#xff1f; 去年项目需要训练百亿参数模型时&#xff0c;我发现自己被困在了显存限制中。市面上的高…

作者头像 李华