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

开个帖子记录一下自己学spring源码的过程

一、写在开头

简单记录下来时路,以后也能回头看看鼓励下自己。我以前不喜欢拍照,觉得没什么意思,有一天百度云盘给我推不知道什么时候从相册推到百度云相册的照片,那是我口罩时期在家上体育课的照片,我现在回头望过去觉得那时很幸福。现在后悔以前没怎么拍照片,想回忆起过去只能靠脑袋里的记忆,但随着时间是越来越模糊。
说多了,现在开始记录spring源码的学习过程吧

二、正式开始

2025年5月7日00:07:27

🌱 初识 Spring:为什么我们需要它?

在早期开发 Java 企业级应用时,程序员需要手动处理很多琐碎的事情,比如:

  • 对象的创建和管理(谁来 new?谁来管理生命周期?)
  • 多个模块之间的依赖关系如何连接?
  • 业务逻辑和日志、权限控制等“杂事”混杂在一起,维护难度很高

于是,Spring 框架就登场了。它就像一个万能工具箱,为我们解决了这些问题,让开发工作更简单、高效。


🧰 Spring 能做什么?简单点说就是这几点:

  1. 帮你管理对象(Bean):你不需要自己去创建、管理对象,Spring 会代劳。
  2. 解耦合:模块之间不再直接依赖,而是通过 Spring 容器连接,改起来更灵活。
  3. 提供事务、消息、远程调用等强大功能:而且整合了主流框架(如 MyBatis、JPA)。
  4. 可以像切洋葱一样“切”功能:用 AOP 把权限、日志、监控从业务逻辑中分离。
  5. 开放灵活:你可以只用 Spring 的一部分,不需要全盘接入。

🔧 Spring 的核心理念:IOC 与 AOP

🧩 IOC(控制反转)

简单理解:你不再负责 new 对象,Spring 来做这事。

以前你这样写代码:

UserService service = new UserServiceImpl();

现在你只要告诉 Spring:“我要个 UserService”,Spring 会自动帮你创建、配置好:

@Autowired
private UserService userService;

这就是依赖注入(DI),是 IOC 的一种实现方式。

🪚 AOP(面向切面编程)

比如你有这样的代码:

public void placeOrder() {log();checkPermission();doBusinessLogic();
}

这些日志、权限和真正的业务混在一起,不好维护。

用 AOP,你可以把“日志”“权限”这些通用功能“切出去”:

@Log
@CheckPermission
public void placeOrder() {doBusinessLogic();
}

🏗️ Spring 的结构是怎样的?

你可以把 Spring 看作一座大楼,每一层都负责不同的工作,从基础设施到高级服务。

第1层:核心容器 Core Container(基础设施层)

这是 Spring 的地基,负责“管理对象”这件事:

  • spring-core:IOC/DI 的核心实现
  • spring-beans:负责读取配置、管理 Bean 的生命周期
  • spring-context:提供类似“应用上下文”的功能,像是 Spring 的运行环境
  • spring-expression:可以写复杂表达式动态操作对象(比如 #{user.age > 18}

第2层:数据访问层(JDBC、ORM 等)

用于操作数据库:

  • spring-jdbc:简化传统 JDBC 编程(不用再写 try-catch-finally)
  • spring-orm:整合 JPA、Hibernate、MyBatis 等 ORM 框架
  • spring-tx(事务):帮你自动管理事务(不用自己写 commit/rollback)

第3层:Web 支持(Servlet、MVC、WebSocket 等)

  • spring-web:支持 Web 项目、文件上传、IoC 初始化
  • spring-webmvc:核心的 MVC 实现,适合开发 REST API 或传统 Web 应用
  • spring-websocket:支持实时双向通信(聊天、直播场景)
  • spring-portlet:为基于 Portlet 的环境提供支持(较少使用)

第4层:切面编程与工具层

  • spring-aop:支持定义切面、切点和通知
  • spring-aspects:整合 AspectJ 框架(AOP 更强大)
  • spring-instrument:用于类加载优化(主要用于服务器部署)
  • spring-messaging:消息协议支持(如 STOMP + WebSocket)

第5层:测试支持

  • spring-test:方便用 JUnit 或 TestNG 测试 Spring 应用

🧱 总结一句话:

Spring 是一个分层、模块化的“开发大工厂”,核心是 用容器管理对象(IOC),并通过 切面编程(AOP)实现对业务代码的“功能增强”。你可以只用你需要的那部分,逐步深入。

相关文章:

  • LLM评估指标:WSC和WebNLG 是什么
  • mysql协议详解
  • Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度
  • 使用 AddressSanitizer 检测堆越界错误
  • 小刚说C语言刷题—1044 -找出最经济型的包装箱型号
  • 资产管理系统选型避坑:2025年核心技术趋势洞察
  • 凌晨三点的数据库崩溃现场
  • Dependency Track使用
  • 疗愈服务预约小程序源码介绍
  • cesium之自定义地图与地图叠加
  • 卷积神经网络基础(五)
  • MySQL 表的内外连接
  • 数学复习笔记 3
  • 空间内任意点到直线和平面的距离推导
  • [Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey
  • vue+tsc+noEmit导致打包报TS类型错误问题及解决方法
  • 【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
  • Redis面试 实战贴 后面持续更新链接
  • Linux系统之shell脚本基础:条件测试、正整数字符串比较与if、case语句
  • C# Winforms 本地化 多语言支持 字符串资源
  • 长三角多地重启游轮跨市游,“恢复苏杭夜航船”呼声又起
  • 中邮保险斥资8.69亿元举牌东航物流,持股比例达5%
  • 42岁退役军人高武生命最后时刻:在水中托举近20分钟救出落水孩童
  • 李云泽:对受关税影响较大、经营暂时困难的市场主体,一企一策提供精准服务
  • 心期末后有人传——《钱谦益年谱长编》在钱氏故里首发
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹