news 2026/4/16 17:51:40

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/15 16:07:19

《把脉行业与技术趋势》-102-直流电与交流电的比较:它们不是“优劣之分”,而是物理规律在不同约束下的最优解。如同河流的“直流”奔涌与“交流”潮汐,各循其道,各尽其用。

直流电&#xff08;DC&#xff09;与交流电&#xff08;AC&#xff09;是电能传输与利用的两种根本范式。它们不是“优劣之分”&#xff0c;而是物理规律在不同约束下的最优解——如同河流的“直流”奔涌与“交流”潮汐&#xff0c;各循其道&#xff0c;各尽其用。以下以科学本…

作者头像 李华
网站建设 2026/4/16 14:00:25

基于用户行为与电影票房混合权重的协同过滤电影推荐平台开题报告

基于用户行为与电影票房混合权重的协同过滤电影推荐平台开题报告 一、选题背景 随着数字媒体技术的飞速发展与流媒体平台的普及&#xff0c;电影内容呈现爆发式增长态势&#xff0c;全球每年产出数万部各类影片&#xff0c;流媒体平台的影片库规模也持续扩容。据行业数据显示&…

作者头像 李华
网站建设 2026/4/16 13:51:53

最值得推荐的5家跨境营销服务商

一、趋势与价值随着跨境电商竞争加剧&#xff0c;企业不再满足于依赖第三方平台获取流量&#xff0c;而是希望通过自建独立站、搭建营销中台来掌握自主流量和数据资产。独立站市场正在迅速增长&#xff0c;预计到2025年中国独立站规模将达5.5万亿元并占跨境电商B2C市场的41%–5…

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

JavaWeb企业级开发---用户登录认证

记录在听黑马课的时候的笔记以及课堂上练习的代码&#xff0c;文章图源于我在听课的时候所截的屏&#xff0c;所以有些不清晰&#xff0c;请见谅。下面是课程链接&#xff0c;可点击自行跳转。 【黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;…

作者头像 李华
网站建设 2026/4/16 10:52:52

【课程设计/毕业设计】基于Springboot校园实验室预约管理系统基于springboot的通用预约系统的设计与实现【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华