Skip to content

看过源码吗?说下 Spring 由哪些重要的模块组成? ​

  • 标签:后端、Spring

🏛 业务架构师 ​

Spring 的模块化我按能力分层讲(5.x 体系):

  • core:ioc 容器(BeanFactory、ApplicationContext)与资源抽象——地基,一切能力都长在容器上;
  • beans:Bean 定义、实例化、依赖注入、生命周期管理;
  • context:国际化、事件传播(ApplicationEvent)、环境抽象(profile)——业务事件驱动的载体在这层;
  • aop:切面实现(与 aspjectj 集成)——事务、缓存、异步注解的物理支撑;
  • tx/jdbc/orm:事务抽象与数据访问——统一的事务管理 API 屏蔽了不同资源的事务差异(DB、MQ),声明式事务的根;
  • web/spring-webmvc:DispatcherServlet 为核心的 Web 层——HandlerMapping/Adapter/Interceptor 管线;
  • messging/reactive(webflux):响应式栈;
  • test:测试支撑(上下文缓存、Mock)。

业务架构视角的两个观察:

  1. 模块边界=职责边界的教学范本:容器(core)只管对象生命周期,不掺业务;AOP 是可插拔增强;Web 是入口适配。每层只对自己的抽象负责——业务系统的分包(api/domain/infra)应该学习这种纪律,我们内部标准模板就按此裁剪;
  2. 按需引入是成本纪律:老 Spring 时代一个全家桶 jar 什么都带;Boot 时代模块化成 starter,用多少引多少——依赖面就是安全面(Log4j 漏洞事件里,引得少的团队修复快得多)。我做依赖治理时的原则:每个依赖都要能回答"哪个功能在用它",答不上的就是待清理项。

一句话:Spring 的模块图是一张**"能力如何分层组装"的地图**——看懂它,业务系统的结构设计就有了参照系。

🏗 系统架构师 ​

按 Spring Framework 5/6 的模块划分,我按"核心 → 数据 → Web → 其他"四层讲:

核心容器:

  • spring-core / beans:BeanFactory、BeanDefinition、依赖注入内核;
  • spring-context:ApplicationContext、事件、国际化、@Configuration;
  • spring-expression(SpEL):运行时表达式;
  • spring-aop:AOP 抽象(JDK/CGLIB 代理、AspectJ 注解支持);

数据访问:

  • spring-jdbc(JdbcTemplate、事务抽象核心 @Transactional 的 PlatformTransactionManager 在这里)、spring-tx(事务管理,含传播行为定义)、spring-orm(JPA/Hibernate 集成)、spring-oxm、spring-jms;

Web:

  • spring-web:Servlet 基础设施、RestTemplate/RestClient、编解码;
  • spring-webmvc:DispatcherServlet、@Controller 体系;
  • spring-webflux:响应式(Reactor + Netty);

其他:spring-messaging(STOMP/消息抽象)、spring-aspects(AspectJ 集成)、spring-instrument(AOP 类装载代理)、spring-test(JUnit 集成、MockMvc、@SpringBootTest)。

我的理解主线:所有模块围绕"IOC 容器 + AOP"两个内核组织——core 提供装配能力,其余模块是对接各技术栈的"适配层"(每种外部技术一个 Template + 一套注解抽象)。这个"内核 + 适配"的结构本身就是框架设计的范本,我做公司内部框架时直接照抄这个分层:核心装配层稳定,生态适配层按需扩展。

💻 全栈开发专家 ​

Spring 5/6 之后模块做了扁平化重组,我按"平时真正打交道的"梳理:

核心容器(最重):

  • spring-core:Utils、资源抽象(Resource)、cglib/字节码支撑;
  • spring-beans:BeanFactory、BeanDefinition、属性编辑器——IOC 核心;
  • spring-context:ApplicationContext、事件机制、@ComponentScan、BeanPostProcessor 体系——Bean 生命周期管理的主战场;
  • spring-expression:SpEL(@Value("#{...}"))。

AOP:spring-aop(代理工厂、Pointcut/Advice 抽象)+ spring-aspects(AspectJ 注解集成)。

数据访问:spring-jdbc(JdbcTemplate)、spring-tx(声明式事务,@Transactional 的实现地)、spring-orm(JPA/Hibernate 集成)、spring-oxm。

Web:spring-web(基础 Servlet API 抽象)、spring-webmvc(DispatcherServlet 体系、REST 支持)、spring-webflux(响应式,Reactor 基础上)。

其他:spring-messaging(STOMP/消息模板)、spring-test(测试体系:@SpringJUnitConfig、MockMvc)。

源码入口建议(面试说出来很加分):看 Bean 生命周期从 AbstractApplicationContext.refresh() 进;自动配置从 ConfigurationClassPostProcessor 进;事务从事务 TransactionInterceptor 进;MVC 从 DispatcherServlet.doDispatch() 进。模块划分是"知识地图",源码入口才是真功夫。