深度解析 java ssh ssm 和spring boot 三個框架結構的區別(指南八) - 教程
這是一個相當深刻且直擊Java Web開發演進史核心的困難。SSH、SSM、Spring Boot這三個名詞代表了Java Web開發的三個不同時代,理解它們的區別,就像是理解PHP從“刀耕火種”的純腳本時代,到MVC框架(如CodeIgniter),再到現代全棧框架(如Laravel)的演進過程。
讓我們深入思考,從架構、配置、開發體驗和使用場景等多個維度,詳細對比這三種技能棧。
核心思想:一場關于“解放生產力”的革命
Java Web研發的演進史,本質上是一場不斷減少配置、簡化開發、提高集成度的革命。其核心目標始終是:讓開發者從繁重的、重復的“體力活”(配置、整合、部署)中解放出來,專注于業務邏輯的“腦力活”。
- SSH: 代表了“手工裝配裝配工,需從市場上挑選最好的零件(Struts, Spring, Hibernate),然后用大量的XML“螺絲”和“膠水”把它們 painstakingly 組裝在一起。就是”時代。開發者
- SSM: 代表了“品牌套件”時代。Spring家族日益壯大,提供了自家的一整套高質量工具(Spring MVC),開發者不再必須去外面找零件了。組裝過程簡化了,但你仍然需閱讀厚厚的說明書(XML+注解)來完成組裝。
- Spring Boot: 代表了“智能全自動”時代。你只需要告訴它你想要一輛“能跑的Web車”(引入
starter依賴),Spring Boot就會自動為你完成所有的設計、零件選擇、組裝和調試。你只需要坐進去,掛擋,踩油門(寫業務代碼)即可。
第一代:SSH (Struts + Spring + Hibernate) - 遠古巨獸
SSH是2000年代后期Java Web開發的事實標準,它由三個當時最頂尖的開源框架組合而成。
1. 架構與職責分工
這是一個典型的、分層清晰的MVC架構,但每一層都由一個獨立的、不同“公司”的框架負責:
S - Struts (主要負責 M<u>V</u>C 中的
Controller層)- 職責: 作為Web層的核心控制器。它負責接收瀏覽器HTTP請求,根據XML配置(
struts-config.xml)找到對應的Action類,對請求參數進行封裝和驗證,然后調用業務邏輯,最后將結果轉發到合適的視圖(通常是JSP頁面)。 - PHP類比: 想象一下一個非常早期的、純粹的路由和控制器庫。它只關心如何將URL映射到一個處理類,別的它一概不管。
- 職責: 作為Web層的核心控制器。它負責接收瀏覽器HTTP請求,根據XML配置(
S - Spring (主要負責業務邏輯層
Service和DI/IoC容器)- 職責: 在SSH時代,Spring的核心角色是**“膠水”和“管家”**。它本身不處理Web請求。它的IoC(控制反轉)容器負責創建和管理業務邏輯層(Service)和信息訪問層(DAO)的對象。它的AOP(面向切面編程)功能被廣泛用于聲明式事務管理。
- PHP類比: 想象一下Laravel的服務容器(Service Container),但把它單獨拿出來作為一個獨立的庫。它的工作就是幫你
new對象、管理對象之間的依賴關系(依賴注入)以及處理數據庫事務。
H - Hibernate (負責數據訪問層
DAO/Repository)- 職責: 一個功能完備的ORM框架,負責將Java對象映射到數據庫表,實現了JPA規范。它隱藏了絕大部分的JDBC和SQL代碼,讓開發者行以面向對象的方式管理數據庫。
- PHP類比: Doctrine。一個強大、重量級、達成了Data Mapper模式的ORM。
2. 開發體驗與使用場景
- 設置地獄 (XML Hell): SSH項目最顯著的特征就是海量的XML配置文件。
struts-config.xml,applicationContext.xml(Spring),hibernate.cfg.xml,*.hbm.xml(Hibernate映射文件)… 任何一個微小的改動都可能需要你在多個XML文件中進行同步修改。 - 整合成本高: 這三個框架并非天生一體,需要開發者編寫大量的“膠水代碼”來讓它們協同工作,例如配置Spring來管理Struts的Action。
- 使用場景: 現在幾乎沒有任何新工程會選擇SSH。你只可能在維護很古老的、十幾年前開發的遺留系統(Legacy System)時才會遇到它。
第二代:SSM (Spring MVC + Spring + MyBatis) - 一代經典
MyBatis應運而生。就是隨著Spring框架的不斷成熟,它推出了自己的MVC框架——Spring MVC,意圖取代Struts。同時,一些開發者覺得Hibernate過于笨重和“魔法”,更傾向于能自己掌控SQL,于
1. 架構與職責分工
這是一個以Spring為絕對核心的“全家桶”架構。
S - Spring MVC (負責
Controller層)- 職責: 完全取代了Struts。它是一個基于Servlet API構建的、靈活且強大的MVC框架。通過
@Controller,@RequestMapping等注解,開發者可以輕松地將請求映射到處理方法,配置大大簡化。 - PHP類比: 類似于Symfony的MVC組件或CodeIgniter的路由和控制器部分。它獻出了一套完整的、官方的Web層解決方案。
- 職責: 完全取代了Struts。它是一個基于Servlet API構建的、靈活且強大的MVC框架。通過
S - Spring (負責
Service層和框架核心)- 職責: 角色與SSH時代類似,但緣于Spring MVC也是自家人,所以整個應用的整合變得天衣無縫。它依然是整個應用的IoC/DI核心和事務管理器。
M - MyBatis (負責數據訪問層
DAO/Repository)- 職責: 取代了Hibernate的位置。MyBatis是一個“半自動”的ORM,或者更準確地說,是一個SQL Mapper(SQL映射器)。它不自動生成SQL。開發者要求在一個XML文件(Mapper.xml)中手動編寫SQL語句,然后MyBatis負責將SQL的輸入參數和查詢結果安全地映射到Java對象上。
- PHP類比: 非常類似于直接使用PDO配合一個輕量級的查詢構造器。你依然可以完全控制你的SQL,但免去了手動綁定參數和處理結果集的繁瑣工作。它給了開發者更多的SQL控制權和優化空間,這在對性能要求極高的互聯網應用中備受青睞。
2. 開發體驗與使用場景
- 配置簡化: 引入了大量注解,XML配置相比SSH大幅減少,但應用的啟動入口、不同層次的配置(
web.xml, Spring配置文件)依然需要手動管理。 - 輕量級內容訪問: MyBatis的“SQL-Centric”思想讓很多習慣寫SQL的開發者感到非常舒適。
- 使用場景: SSM架構非常經典,至今仍有大量的中大型企業應用和互聯網后臺在使用。它的技術成熟、穩定、社區龐大,性能也經過了驗證。對于需要精細控制SQL、且編寫團隊對Spring有深入理解的場景,它依然是一個不錯的選擇。許多老項目會從SSH重構成SSM。
第三代:Spring Boot - 現代王者
Spring Boot的出現,并非要取代Spring/Spring MVC,而是對Spring框架本身的一次“徹底的自我革命”。它的目標是解決SSM時代依然存在的配置繁瑣、依賴管理復雜、部署困難等問題。
1. 架構與職責分工
Spring Boot不是一個新的框架,而是一個腳手架、一個配置和運行平臺。一個典型的Spring Boot計劃,其內部核心依然是Spring MVC + Spring + Spring Data JPA(Hibernate) 的組合。
- Controller層: 依然是Spring MVC,但你不再需要配置它。引入
spring-boot-starter-web,所有配置自動完成。 - Service層: 依然是Spring Core,通過
@Service注解和自動組件掃描來管理。 - Data Access層: 默認推薦Spring Data JPA通過(底層是Hibernate),它比直接應用Hibernate更簡單。當然,你也能夠非常容易地切換為MyBatis。
2. 創建體驗與使用場景
- 約定優于配置 (Convention over Configuration): 這是Spring Boot的靈魂。它基于你引入的
starter依賴,自動為你配置好一切。例如,看到starter-web就知道你要做Web應用,自動配置Tomcat和Spring MVC;看到starter-data-jpa和MySQL驅動,就知道你要連MySQL,自動配置好數據源和Hibernate。 - 零配置/極簡配置: 沒有XML。所有配置都在
application.yml中,且大部分都有智能的默認值。 - 內嵌服務器: 無需部署到外部Tomcat。應用本身就是一個可執行JAR,內置了服務器,大大簡化了部署和運維。
- 強大的生態: 豐富的“Starters”覆蓋了幾乎所有構建場景(數據庫、緩存、消息隊列、安全…)。
3. PHP類比
Spring Boot 就是Java世界的現代Laravel。
- 約定優于配置: 兩者都遵循這一理念,讓開發者開箱即用。
- 命令行工具: Spring Boot可以通過Spring CLI,而Laravel有
artisan。 - 內嵌開發服務器:
java -jar app.jar和php artisan serve異曲同工。 - 強大的生態: Spring Boot的
starters和Laravel的生態包(Cashier, Passport, Telescope…)都極大地豐富了框架的能力。 - 開發效率: 兩者都致力于將開發者從繁瑣的安裝中解放出來,聚焦于快捷實現業務價值。
總結對比表
| 特性 | SSH (Struts + Spring + Hibernate) | SSM (Spring MVC + Spring + MyBatis) | Spring Boot |
|---|---|---|---|
| 時代 | 2005-2012 (遠古時代) | 2012-2017 (經典時代) | 2017-至今 (現代) |
| 哲學 | 手動組裝 | 品牌套件 | 智能全自動 |
| 核心組件 | Struts, Spring, Hibernate (三個獨立框架) | Spring MVC, Spring, MyBatis (Spring全家桶) | Spring MVC, Spring, Spring Data JPA (底層可選) |
| 配置方式 | 重度XML | XML + 注解 | 零XML,YAML/Properties + JavaConfig |
| 數據訪問 | 全自動ORM(Hibernate) | 手動SQL映射(MyBatis) | 默認全自動ORM(JPA/Hibernate), 可選MyBatis |
| 部署方式 | WAR包-> 外部Tomcat | WAR包-> 外部Tomcat | 可執行JAR包(內置Tomcat) |
| 開發體驗 | 極其繁瑣、配置地獄、整合困難 | 相對簡化、配置仍較多、需手動管理 | 極其簡單、開箱即用、約定優于部署 |
| PHP類比 | 早期“手搖”框架(Smarty+PEAR+自定義邏輯) | 經典MVC框架(CodeIgniter, Symfony 2) | 現代全棧框架(Laravel) |
| 使用場景 | 僅用于維護極老的遺留系統 | 現有的大量企業級方案,或需要精細控制SQL的場景 | 所有新計劃的首選,特別是微服務、云原生應用 |
給PHP開發者的最終建議:
如果你現在開始學習Java Web研發,請直接從Spring Boot開始。你不必須花時間去深入學習SSH的XML配置,也不必糾結于SSM的手動整合。直接擁抱Spring Boot,你會發現它的編寫體驗和理念與你熟悉的Laravel非常相似,可能讓你最快地將PHP的開發思想平移到Java世界,并構建出穩定、高效、易于部署的現代化應用。

浙公網安備 33010602011771號