Java架构师成长之路-框架源码系列-整体认识Spring体系结构(1)

emmm...第一次写博客,觉得应该说些什么,但技术之路,无须多言,直接🐛就好了!

首先,我相信有很多人和我一样,在刚接触Spring的时候会一脸懵逼,也不明白各个结构模块之间到底是什么关系,谁包含谁,以及各模块之间的联系是什么?hold on ,hold on!我们的悲喜是相通的,所以希望用我自己的学习经验带大家梳理一下Spring的体系结构,小白发言,如果有什么不对的地方,欢迎大家指正学习!

首先,大家要知道的是,Spring是按照模块化进行设计的,具体的模块如下图所示,我也以此图为准来为大家介绍各模块,在这里我不细致的介绍源码,后面的文章会细致介绍主要部分。

1. Core Container(核心模块)

我们首先从Spring的核心说起,因为这是其他模块建立的基础:

1.1 Beans

这个模块是最核心的模块,它提供了BeanFactory 的实现,豆子工厂嘛,这也是工厂模式的一个体现,并且负责Bean的定义、依赖注入和生命周期管理,里面有三个重要的接口:

  • BeanFactory:最基础的IoC容器接口,负责Bean的创建和管理;
  • ApplicationContext:这是现在去用的容器接口,是BeanFactory的子接口但也是增强版,提供了更强大的功能;
  • BeanPostProcessor:允许在Bean初始化前后自定义逻辑处理;

1.2 Core

这个模块提供了核心工具类、类型转换、资源访问、反射封装等一些核心功能

  • 资源访问(Resource):Spring 提供 org.springframework.core.io.Resource 及相关实现类,统一管理不同类型的资源访问(如文件、类路径、URL 等)。里面提供好多实现类就是用于管理不同的资源
  • Resource(接口):Spring 资源访问的抽象,支持文件、URL、类路径资源等。 ClassPathResource:从 classpath: 读取资源。
ini 复制代码
- Resource resource = new ClassPathResource("config.properties");
- InputStream inputStream = resource.getInputStream();
  • 类型转换:Spring 提供 ConversionService 进行 数据类型转换,这里其实主要适用于在用@Value注入的时候进行数据类型转换。
  • 反射工具:Spring提供ReflectionUtils 来简化反射操作,封装了字段访问、方法调用、类遍历功能。具体在应用时的场景就是在SpringAOP、Bean注入的时候会用到,减少手写反射的麻烦。
  • 线程池管理:这里重点的线程池实现类都是此模块来提供。

还有一些就不详细介绍了,大家可以自行去查看。

1.3 Context

其实这个模块这里我们只需要知道它是BeanFactory的增强版ApplicationContext 的完整实现就行,提供了完整的Spring运行时环境。作为一个更强大的容器,它增强了AOP以及SpringBoot的自动装配(本质上是用ApplicationContextAware 访问 ApplicationContext)以及注解驱动(相比于XML方式注解方式更加简洁),所以它是整个Spring框架的核心(实际上是建立在Beans模块和Core模块之上的)。

1.4 SpEL

SpEL 是 Spring 生态中的表达式语言 ,用于在运行时动态解析和计算表达式,支持从对象图、配置、方法调用中提取或操作数据。 实际上,在简单场景上很少会碰到SpEL的具体使用,它的价值更多的体现在特定的灵活性和动态性上。

kotlin 复制代码
// 动态读取配置 + 计算(如超时时间 = 基础值 * 倍数)
@Value("#{${base.timeout} * ${timeout.multiplier}}")
private long timeout;
// 调用 Bean 方法获取配置(如根据环境变量动态计算)
@Value("#{configManager.getApiEndpoint()}")
private String apiUrl;

2. 小总结

这篇文章主要是把Spring模块里最核心的部分简单介绍一下,后面其他的模块基本也是基于这些来进行扩展的, 第一次写博客就先写到这里,下一篇尽量把体系结构写完!有些东西我也是在慢慢学,慢慢写,所以欢迎大家指正讨论! 另外,希望大家能够共同努力,沉下心来去把自身技术沉淀下来!共勉!

相关推荐
Apifox18 分钟前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
uhakadotcom19 分钟前
使用 Model Context Protocol (MCP) 构建 GitHub PR 审查服务器
后端·面试·github
Asthenia041236 分钟前
详细分析:ConcurrentLinkedQueue
后端
uhakadotcom1 小时前
Ruff:Python 代码分析工具的新选择
后端·面试·github
uhakadotcom1 小时前
Mypy入门:Python静态类型检查工具
后端·面试·github
喵个咪1 小时前
开箱即用的GO后台管理系统 Kratos Admin - 定时任务
后端·微服务·消息队列
Asthenia04121 小时前
ArrayList与LinkedList源码分析及面试应对策略
后端
Asthenia04121 小时前
由浅入深解析Redis事务机制及其业务应用-电商场景解决超卖
后端
Asthenia04121 小时前
Redis详解:从内存一致性到持久化策略的思维链条
后端
Asthenia04121 小时前
深入剖析 Redis 持久化:RDB 与 AOF 的全景解析
后端