Spring 由 Rod Johnson 2000 年倫敦金融業顧問時萌芽,2003 年 SourceForge 開源,2004 年 1.0 釋出。以非侵入性、IOC/AOP 核心、豐富擴展、優質文檔著稱,成為 Java EE 開發事實標準框架,亦可移植 .NET。本文涵蓋發展史、七大模組、核心功能、事務管理實戰。

核心容器為基座,其他模組可單獨或組合使用:
| 模組 | 核心職責 |
|---|---|
| 核心容器 | BeanFactory (工廠模式 + IOC),分離配置與程式碼 |
| Spring Context | 企業服務:JNDI、EJB、Email、I18N、驗證、排程 |
| Spring AOP | 將 AOP 整合進框架,任意 Bean 支援 AOP;聲明式事務管理 |
| Spring DAO | JDBC DAO 抽象層,有意義異常階層,簡化錯誤處理 |
| Spring ORM | 整合 JDO、Hibernate、iBATIS、db4o,遵循統一事務/DAO 異常體系 |
| Spring Web | Web 上下文、Struts 整合、多部分請求、請求參數綁定 |
| Spring MVC | 全功能 MVC 實現,策略介面高度可配置,支援 JSP/Velocity/Tiles/iText/POI 等視圖技術 |
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition);
void commit(TransactionStatus status);
void rollback(TransactionStatus status);
}
TransactionDefinition 定義隔離級別、傳播行為、超時、唯讀;TransactionStatus 提供控制與狀態查詢。
方式一:TransactionTemplate(回呼風格,線程安全,類似 JdbcTemplate)
Object result = tt.execute(new TransactionCallback() {
public Object doTransaction(TransactionStatus status) {
updateOperation();
return resultOfUpdateOperation();
}
});
方式二:直接使用 PlatformTransactionManager
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(def);
try {
// business logic
transactionManager.commit(status);
} catch (Exception e) {
transactionManager.rollback(status);
}
TransactionProxyFactoryBean:目標 Bean 包裝於事務代理,提供 PlatformTransactionManager 引用與事務屬性(傳播、隔離、回滾規則、唯讀)。支援 CGLIB 代理具體類、指定代理介面、前/後攔截器鏈。
事務屬性範例:PROPAGATION_REQUIRED,-MyCheckedException(遇到 MyCheckedException 回滾)、PROPAGATION_REQUIRED,readOnly。
BeanNameAutoProxyCreator:批量包裝 Bean,實現 BeanFactoryPostProcessor,自動後處理上下文中所有 Bean。
Spring 以開源應用框架重新定義 Java 企業開發:IOC 解耦、AOP 模組化橫切關注、統一抽象屏蔽底層複雜性、聲明式事務簡化資源管理。掌握 Spring,即掌握現代 Java 企業級開發的核心槓桿。