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

开个帖子记录一下自己学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)实现对业务代码的“功能增强”。你可以只用你需要的那部分,逐步深入。

http://www.xdnf.cn/news/4188.html

相关文章:

  • Spyglass:官方Hands-on Training(三)
  • 数据中台架构设计
  • c++类【发展】
  • 【全面解析】Poco C++ Libraries 模块详解与使用指南
  • UE5 使用插件进行Audio2face和UE5的实时链接并实时输出嘴型
  • 多模态训练与微调
  • 突破v0.dev对话限制的两种方法
  • k8s node 报IPVS no destination available
  • 19.第二阶段x64游戏实战-vector容器
  • 二叉树的最大深度(简单)
  • 标题:基于自适应阈值与K-means聚类的图像行列排序与拼接处理
  • LintCode第484题-交换数组两个元素,第9题-Fizz Buzz 问题,第46题-主元素,第50题数组剔除元素后的乘积
  • 超表面加工流程
  • 从零开始了解数据采集(二十二)——塑胶制品行业趋势分析案例
  • (leetcode) 力扣100 6.三数之和 (双指针)
  • 卷积神经网络的简单实战项目
  • 大模型——GraphRAG基于知识图谱+大模型技术构建的AI知识库系统
  • 怎样用 esProc 实现多数据库表的数据合并运算
  • 深入理解 Linux 阻塞IO与Socket数据结构
  • 《脑机接口与AI:如何让瘫痪患者用“意念”实现创作?》
  • 在 PyTorch 中借助 GloVe 词嵌入完成情感分析
  • 【Vue】组件自定义事件 TodoList 自定义事件数据传输
  • Spring Boot3 实现定时任务 每10分钟执行一次,同时要解决分布式的问题 区分不同场景
  • 【coze】意图识别(售前售后问题、搜索引擎去广告)
  • 机器视觉框架源码——解读3(常用的资源和样式)
  • ShardingJdbc-水平分表
  • LaTex 模板 section 前小节符号去不掉 解决方法
  • MySQL数据库:全方位剖析与实战案例
  • Android Intent 页面跳转与数据回传示例(附完整源码)
  • Gradle -> Gradle的清除缓存指令