Spring 是什么:模块组成与生态

引言

刚接触 Spring 的新人常被“Framework / Boot / Cloud”三个名词绕晕:它们都叫 Spring,却处于不同层次。本章先建立整体地图:Spring Framework 提供最核心的 IoC 容器与 Web MVC 等基础能力,Spring Boot 在其上做“自动配置 + 起步依赖”,Spring Cloud 再往上是分布式微服务套件。看清分层后,后续 19 章学起来才有坐标。

核心概念

  • 版本锚点(检索确认):本教程以 Spring Framework 6.x 为主线。6.x 要求 Java 17+,并把 Java EE 命名空间从 javax.* 迁移到 jakarta.*(6.0 于 2022-11 GA,6.2 为 6.x 现行维护线)。Spring Framework 7.0 已于 2025-11-13 GA(与 Spring Boot 4.x 配套),7.x 的细节以 spring.io 官方文档为准;本教程核心 API 在 6.x 与 7.x 间基本一致。
  • Spring Framework:基础框架,按职责拆成多个模块:spring-core/spring-beans(IoC 容器基础)、spring-context(ApplicationContext 与事件、国际化)、spring-aop/spring-aspects(AOP)、spring-expression(SpEL)、spring-jdbc/spring-tx/spring-orm(数据访问与事务)、spring-web/spring-webmvc(MVC)、spring-webflux(响应式)、spring-test(测试)。
  • Spring Boot:站在 Framework 之上,提供“约定优于配置”:起步依赖(starter)替你聚合依赖,自动配置(AutoConfiguration)按 classpath 推断并装配 Bean,内嵌 Web 服务器,目标是把应用跑起来这件事变得极简。
  • Spring Cloud:站在 Boot 之上,面向分布式/微服务:服务注册发现、配置中心、网关、熔断、分布式链路等能力通过 Boot 的自动配置机制集成。
  • 三者不是互斥框架,而是叠加关系:Framework ⊂ Boot ⊂ Cloud。

代码示例

// 只依赖 spring-context 时,手动创建容器:
AnnotationConfigApplicationContext ctx =
        new AnnotationConfigApplicationContext(AppConfig.class);
GreetingService service = ctx.getBean(GreetingService.class);
System.out.println(service.greet("Spring")); // 输出欢迎语
ctx.close();

// 使用 Spring Boot 后,同样的能力由自动配置接管:
// @SpringBootApplication 所在类即入口,容器与组件扫描自动就绪。

注意点

  • 写依赖时认准模块:AOP 需要 spring-aop,MVC 需要 spring-webmvc,事务需要 spring-tx;用 Boot 时直接引对应 starter 即可。
  • 命名空间要统一:6.x 一律 jakarta.servlet.*jakarta.annotation.*,网上老资料里的 javax.* 在 6.x 会编不过。
  • 别把 Boot 的自动配置当成魔法:它本质仍是 Framework 的 @Configuration + 条件装配(后续第 07 章会讲)。
  • 版本选型请以官方支持政策(spring.io/projects/spring-framework 与 support policy)为准,生产项目勿停留在已 EOL 的 5.x。

小结

Spring Framework 是地基,模块清晰:容器(core/beans/context)→ 横切(aop)→ 数据(jdbc/tx/orm)→ Web(web/webmvc)→ 测试(test)。Boot 让装配自动化,Cloud 让分布式落地。后续章节从最核心的 IoC 容器讲起。

笔记加载中…