Spring 是一個開源的控制反轉(IoC,Inversion of Control)和面向切面編程(AOP)的容器框架,核心目標是簡化企業級應用開發。
傳統模式(強耦合):
public class PersonServiceBean {
private PersonDao personDao = new PersonDaoBean(); // 內部直接 new
public void save(Person person) {
personDao.save(person);
}
}
問題:Service 與具體 Dao 實現緊耦,難以測試、擴展、替換。
IoC 模式(依賴注入):
public class PersonServiceBean {
private PersonDao personDao; // 僅依賴接口
// 構造器注入:容器負責創建 PersonDao 並傳入
public PersonServiceBean(PersonDao personDao) {
this.personDao = personDao;
}
// 或 Setter 注入
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
public void save(Person person) {
personDao.save(person);
}
}
本質:對象創建與依賴管理的控制權從應用代碼「反轉」到外部容器。容器在運行期動態將依賴對象注入組件,實現依賴注入(DI,Dependency Injection)。
將事務管理、日誌、權限、性能監控等橫切業務邏輯的通用功能從業務代碼中剝離,以「切面」形式聲明式地織入,實現關注點分離。
| 收益 | 說明 |
|---|---|
| 降低耦合度 | 組件間通過接口交互,實現各層解耦,便於單元測試與模塊替換 |
| 聲明式事務管理 | 無需手工控制事務邊界,容器自動處理提交/回滾及傳播行為 |
| 單例模式支持 | 容器內置單例管理,無需手寫雙重檢查鎖等樣板代碼 |
| AOP 能力 | 輕鬆實現權限攔截、執行監控、日誌記錄等橫切邏輯 |
| 豐富模板類 | JdbcTemplate、HibernateTemplate 等大幅減少樣板代碼 |
| 框架集成 | 原生支持 Hibernate、JPA、Struts 等主流框架無縫整合 |
「至少在我看來,在項目中引入 Spring 立即能帶來上述好處。我們不再需要手工控制事務,也不需處理複雜的事務傳播行為。」
Spring 以非侵入式設計、輕量級容器、豐富的生態系統,成為 Java 企業級開發的事實標準。