Spring 创建对象的流程

ops/2025/2/27 22:01:09/

1. 故事背景

想象一下,你是一个老板,要开一家公司。公司里有很多员工(对象),每个员工都有自己的职责和依赖关系(比如,程序员需要电脑,销售需要电话等)。传统方式是你自己手动去安排每个员工的工作和工具,但在 Spring 的世界里,有一个超级助手(Spring 容器)帮你搞定这一切。


2. 第一步:告诉助手你需要哪些员工

你需要告诉 Spring 助手,你的公司需要哪些员工,以及他们的职责和依赖关系。你可以通过以下方式告诉助手:

  • 写一张清单(XML 配置文件):比如,“我需要一个程序员,他需要一台电脑。”
  • 贴标签(注解):比如,在程序员身上贴一个标签,写上“这是程序员,他需要电脑。”
  • 口头交代(Java 配置类):比如,直接告诉助手,“帮我招一个程序员,给他配一台电脑。”

3. 第二步:助手开始工作

助手(Spring 容器)拿到你的需求后,开始干活:

  1. 解析需求:助手会仔细阅读你的清单、标签或口头交代,弄清楚每个员工的具体信息。
  2. 招人(创建对象)
    • 如果员工是单例(Singleton),助手只会招一个人,并且让这个人一直工作,直到公司关门。
    • 如果员工是原型(Prototype),助手每次需要的时候都会招一个新的人。
  3. 配工具(依赖注入)
    • 助手会根据员工的需求,给他们配好工具。比如,程序员需要电脑,助手就会把电脑(依赖对象)交给他。
    • 工具可以通过以下方式交给员工:
      • 构造函数:助手在招人的时候,直接把工具塞到员工手里。
      • Setter 方法:助手招到人后,通过一个方法把工具交给员工。
      • 直接塞(字段注入):助手悄悄把工具放到员工的办公桌上。
  4. 培训(初始化)
    • 如果员工需要培训(比如程序员需要学习新技术),助手会安排培训(调用初始化方法)。

4. 第三步:员工开始工作

招到人并配好工具后,员工就可以开始工作了。你可以随时调用这些员工来完成公司的任务。


5. 第四步:公司关门(销毁)

当公司关门时,助手会通知所有员工收拾东西离开(调用销毁方法),比如程序员要把电脑还回去。


6. 总结

用一句话概括 Spring 创建对象的流程:
你告诉 Spring 需要哪些对象(Bean)以及它们的依赖关系,Spring 负责创建这些对象、给它们注入依赖、初始化它们,并在不需要的时候销毁它们。


举个例子

假设你有一个 UserService(用户服务),它需要一个 UserDao(用户数据访问对象)来操作数据库。你可以这样告诉 Spring:

  1. XML 配置
    <bean id="userService" class="com.example.UserService"><property name="userDao" ref="userDao"/>
    </bean>
    <bean id="userDao" class="com.example.UserDao"/>
    
  2. 注解配置
    java">@Service
    public class UserService {@Autowiredprivate UserDao userDao;
    }@Repository
    public class UserDao {}
    

Spring 会:

  1. 创建 UserDao 对象。
  2. 创建 UserService 对象,并把 UserDao 交给它。
  3. 初始化 UserService,让它准备好工作。

http://www.ppmy.cn/ops/161777.html

相关文章

PyEcharts 数据可视化:从入门到实战

一、PyEcharts 简介 PyEcharts 是基于百度开源可视化库 ECharts 的 Python 数据可视化工具&#xff0c;支持生成交互式的 HTML 格式图表。相较于 Matplotlib 等静态图表库&#xff0c;PyEcharts 具有以下优势&#xff1a; 丰富的图表类型&#xff08;30&#xff09;动态交互功…

毕业项目推荐:基于yolov8/yolo11的苹果叶片病害检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

洛谷 P8705:[蓝桥杯 2020 省 B1] 填空题之“试题 E :矩阵” ← 卡特兰数

【题目来源】 https://www.luogu.com.cn/problem/P8705 【题目描述】 把 1∼2020 放在 21010 的矩阵里。要求同一行中右边的比左边大&#xff0c;同一列中下边的比上边的大。一共有多少种方案? 答案很大&#xff0c;你只需要给出方案数除以 2020 的余数即可。 【答案提交】 …

【Java项目】基于SpringBoot的【旅游管理系统】

【Java项目】基于SpringBoot的【旅游管理系统】 技术简介&#xff1a;采用Java技术、MySQL数据库、Spring框架实现。 系统简介&#xff1a;系统包括管理员、用户二个用户角色&#xff0c;管理员功能可以管理个人中心、用户管理、景区分类管理、景区信息管理、景区商城管理、商品…

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值--完全 “二叉树” 不一定是 “满二叉树”

P8681 [蓝桥杯 2019 省 AB] 完全二叉树的权值 题目分析代码 题目 分析 我吧完全二叉树记成满二叉树了^^ 又卡我几分钟 代码 #include <iostream> #include <vector> #include <string> #include <algorithm> #include <math.h> #include <qu…

算法仿真平台搭建1-FFMPEG+RtspSever快速搭建一个RTSP服务器

一、前言 本文相关的全部源码和RtspSever库&#xff0c;我已打包上传&#xff0c;欢迎大家免费下载&#xff0c;testRTSPSever。 每一个嵌入式视觉算法工程师&#xff0c;都应该有一套属于自己的算法仿真和测试环境。可以方便地进行视频、图像等素材进行在线导入&#xff0c;可…

是德科技keysight N5173B信号发生器,是一款经济高效的仪器

是德科技keysight N5173B信号发生器安捷伦N5173B信号源 是德N5173B微波模拟信号发生器&#xff0c;拥有 9 kHz 至 40 GHz 的频率覆盖范围&#xff0c;N5173B为宽带滤波器、放大器、接收机等器件的参数测试提供了必要的信号&#xff0c;是一款经济高效的仪器。 N5173B特点&…

C# Unity 唐老狮 No.2 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: Unity课程 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体…