当前位置: 首页 > news >正文

Spring 创建对象的流程

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. 注解配置
    @Service
    public class UserService {
        @Autowired
        private UserDao userDao;
    }
    
    @Repository
    public class UserDao {}
    

Spring 会:

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

相关文章:

  • Rk3568驱动开发_点亮led灯(手动挡)_5
  • 文件上传漏洞学习笔记
  • 【SRC实战】搜索功能泄露订单号+用户定位
  • 自学c++之类、对象、封装
  • 【语法】C++的string
  • 解决应用程序 0xc00000142 错误:完整修复指南
  • 记录Liunx安装Jenkins时的Package ‘jenkins‘ has no installation candidate
  • 全星QMS软件系统:制造业质量管理的全面优化与创新研究
  • 开源基准测试模拟器:BlueROV2 水下机器人的控制(更改Z方向控制器)
  • JAVA面试常见题_基础部分_Dubbo面试题(上)
  • 2025/2/25,字节跳动后端开发一面面经
  • 深入理解Tomcat与Web应用部署:C/S与B/S架构下的实践指南
  • 冒泡排序(Bubble Sort)
  • 第13周:LSTM实现糖尿病探索与预测
  • UE 播放图像序列
  • 学习记录:初次学习使用transformers进行大模型微调
  • Docker镜像面试题及参考答案
  • 计算机毕业设计 ——jspssm513Springboot 的小区物业管理系统
  • HTML+CSS
  • 什么是数据治理?如何从数据治理中获得价值?
  • 一周文化讲座|那些年的年青人
  • AI把野史当信史?警惕公共认知的滑坡
  • 新势力4月销量出炉:零跑逾4万辆再夺冠,蔚来环比增近六成,小米下滑
  • 解放日报:抢占科技制高点,赋能新质生产力
  • 经济日报社论:书写新征程上奋斗华章
  • 夜读丨春天要去动物园