Java Web后端开发历经二十余年迭代,从早期笨重的传统框架SSH,到轻量化标准化的SSM框架,再到零配置快速开发的SpringBoot,最终演进为分布式微服务架构SpringCloud。本文结合官方权威资料与Martin Fowler微服务定义,梳理了Java Web技术演进脉络、各架构特点、优劣差异及适用场景。

演进链路:SSH传统单体架构 → SSM轻量化单体架构 → SpringBoot极简单体架构 → SpringCloud分布式微服务架构

一、第一代架构:SSH 传统单体架构

1 架构组成

SSH = Spring + Struts2 + Hibernate,是2010年前后Java Web主流企业级开发框架,也是最早标准化的Java三层架构解决方案。

  • Spring:负责Bean管理、事务控制、依赖注入,统筹整个项目组件

  • Struts2:MVC控制器框架,接收前端请求、参数封装、跳转控制,承担视图调度工作

  • Hibernate:老牌ORM持久层框架,全自动数据库映射,通过实体类自动生成SQL,无需手动编写SQL语句

2 特点

整体为ALL IN ONE 单体架构,所有业务代码、配置、依赖全部耦合在一个项目中,统一打包、统一部署、统一运行。

3 被SSM淘汰的原因

  1. 配置极度繁琐:项目需要大量XML配置文件,Spring、Struts2、Hibernate均依赖XML配置,搭建基础项目耗时极长

  2. Hibernate笨重僵化:全自动ORM框架,封装度过高,SQL可控性差,复杂查询、多表关联查询优化困难,性能损耗大

  3. Struts2漏洞频发:高危远程执行漏洞频繁爆出,安全性差,且拦截器机制冗余,请求处理效率低

  4. 耦合严重:三层架构边界模糊,业务、数据、视图逻辑粘连,维护成本极高

二、第二代架构:SSM 轻量化标准单体架构

为解决SSH的低效、难优化问题,行业逐步迭代出SSM框架,至今仍是Java后端入门核心、中小企业传统项目主流技术栈。

1 架构组成

SSM = Spring + SpringMVC + MyBatis,替换SSH的两大短板组件,架构更轻量、更灵活。

  • Spring:保留核心容器,继续负责事务、Bean管理、依赖注入

  • SpringMVC:替换Struts2,Spring原生MVC框架,无缝整合Spring,无冗余拦截器、请求处理高效、安全性高

  • MyBatis:替换Hibernate,半自动轻量级ORM框架,手动编写SQL,灵活适配复杂业务,性能损耗极低

2 配套配置

SSM项目依赖四大配置文件贯穿整个应用,也是和SpringBoot最大的区别:

  1. web.xml:项目入口,调度Spring容器、SpringMVC前端控制器、编码过滤器、全局监听器

  2. spring.xml:Spring父容器配置,管理Service、Dao、数据源、事务、MyBatis整合

  3. springmvc.xml:SpringMVC子容器配置,管理Controller、视图解析器、拦截器、静态资源放行(视图引擎在此配置)

  4. mybatis-config.xml:MyBatis全局配置,驼峰命名、日志、别名、分页插件等

3 架构优势与遗留痛点

优势:轻量化、SQL可控、性能优异、架构分层清晰、安全性高、适配绝大多数传统单体业务。

遗留痛点:依然需要大量手动XML配置、项目搭建繁琐、依赖版本需要手动管控、无内置服务器、需要外置Tomcat部署、无自动化监控、无法快速迭代部署。

三、第三代架构:SpringBoot 极简自动化单体架构

SpringBoot基于Spring、SSM架构优化而生,是目前企业开发单体项目的首选框架。

1 SpringBoot定位

SpringBoot是简化Spring应用开发的一站式脚手架框架,整合整个Spring技术栈,实现J2EE开发零配置、开箱即用,核心特性参考Spring官方文档

2 特性

  1. Starters自动依赖与版本管控:官方封装场景化启动器(spring-boot-starter-web等),引入一个依赖即可导入全套场景组件;通过parent父工程统一管理所有依赖版本,彻底解决版本冲突,无需手动声明版本号。

  2. 全自动装配:基于SPI机制,自动加载META-INF/spring.factories配置,自动装配Web、数据库、视图引擎等组件。

  3. 内置嵌入式容器:内嵌Tomcat、Jetty容器,无需外置Tomcat,项目可直接打包为Jar包,通过java -jar命令一键部署运行。

  4. 极简配置文件:仅需application.properties/application.yml全局配置文件,按需修改默认配置,支持多环境配置、动态占位符、外部配置加载。

  5. 原生监控与热部署:支持devtools热部署、准生产级别运行监控,适配云原生开发场景。

3 SpringBoot快速入门代码

1. pom依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. 启动主类

@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

4 架构定位

SpringBoot并未改变单体架构本质,只是简化了单体架构的开发、配置、部署流程,所有业务依然在一个进程中运行,无法解决大型项目的耦合、扩容、迭代难题,由此催生微服务架构。

四、第四代架构:SpringCloud 分布式微服务架构

1 微服务(Martin Fowler 2014)

微服务架构由Martin Fowler于2014年3月25日在官方博客正式定义 ​​​​​​微服务

微服务架构是一种将单个应用程序构建为一组小型独立服务的架构风格,每个服务运行在独立进程中,通过轻量级HTTP API通信;服务基于业务能力构建,可全自动独立部署,支持去中心化技术选型与数据管理,最小化集中式管控。

2 微服务架构特征

  1. 基于业务能力拆分:摒弃技术分层拆分,按业务域拆分服务(用户服务、订单服务、支付服务),适配康威定律。

  2. 独立部署、独立扩容:每个服务独立开发、测试、打包、部署,高并发模块单独扩容,无需整体扩容。

  3. 去中心化治理:支持多语言、多技术栈、多数据源(异构持久化),按需选型技术方案。

  4. 智能端点、哑管道:服务自身包含完整业务逻辑,通信层仅做简单路由,摒弃SOA笨重的ESB企业服务总线。

  5. 容错与进化设计:面向失败设计,支持熔断、降级、限流,服务可迭代、可替换、可废弃。

3 微服务优缺点

✅ 优点

  • 服务粒度小,单一职责,聚焦单一业务,代码可读性、可维护性极强

  • 小团队独立开发、迭代、运维,提升团队协作效率,适配敏捷开发

  • 松耦合架构,服务间依赖弱,局部修改不影响整体系统

  • 支持异构技术栈,不同服务可适配不同语言、数据库、中间件

  • 按需弹性扩容,大幅降低服务器资源损耗

❌ 缺点

  • 架构复杂度大幅提升,从单体架构升级为分布式架构

  • 引入分布式问题:服务调用、链路追踪、分布式事务、一致性问题

  • 运维成本激增,需要适配容器化、CI/CD自动化部署、监控告警体系

  • 服务治理难度高,需要注册中心、配置中心、网关、熔断限流等配套组件

4 SpringCloud 生态体系

SpringCloud是基于SpringBoot的微服务一站式治理方案,提供全套分布式架构解决方案,适配微服务架构规范,组件包含注册中心、网关、配置中心、熔断降级、负载均衡、链路追踪等,是目前Java微服务行业标准。

六、四大架构横向对比总结

架构

组合

架构类型

优势

适用场景

SSH

Spring+Struts2+Hibernate

传统单体

早期标准化三层架构

老旧遗留项目,现已淘汰

SSM

Spring+SpringMVC+MyBatis

轻量化单体

灵活可控、性能优异、稳定可靠

中小企业单体项目、后台管理系统

SpringBoot

Spring全家桶自动化整合

极简单体

零配置、快速开发、一键部署

中小型快速迭代项目、独立服务

SpringCloud

SpringBoot+微服务治理组件

分布式微服务

高可用、可扩容、易迭代、适配大型业务

大型互联网项目、高并发分布式系统


参考文献

[1] Martin Fowler. Microservices Architecture[EB/OL]. https://martinfowler.com/articles/microservices.html, 2014-03-25.

[2] Spring Official Documentation. Spring Boot External Configuration[EB/OL]. https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#boot-features-external-config.

更多推荐