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

相关推荐
yu4106213 小时前
Rust 语言使用场景分析
开发语言·后端·rust
细心的莽夫3 小时前
SpringCloud 微服务复习笔记
java·spring boot·笔记·后端·spring·spring cloud·微服务
jack_xu5 小时前
高频面试题:如何保证数据库和es数据一致性
后端·mysql·elasticsearch
pwzs5 小时前
Java 中 String 转 Integer 的方法与底层原理详解
java·后端·基础
Asthenia04125 小时前
InnoDB文件存储结构与Socket技术(从Linux的FD到Java的API)
后端
Asthenia04125 小时前
RocketMQ 消息不丢失与持久化机制详解-生产者与Broker之间的详解
后端
〆、风神6 小时前
Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
spring boot·分布式·后端
Asthenia04126 小时前
Select、Poll、Epoll 详细分析与面试深度剖析/C代码详解
后端
烛阴6 小时前
Node.js中必备的中间件大全:提升性能、安全与开发效率的秘密武器
javascript·后端·express