首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Java EE 四大常用框架深度解析(二):Spring 核心容器、IoC/DI、AOP 與全棧整合能力

     編輯:J2EE

系列第二篇聚焦 Spring 框架核心架構與生態整合能力。(第一篇介紹 Struts/Swing,第三篇 Hibernate,第四篇綜合對比。)

Spring 定位:輕量級、全棧整合、低侵入

  • 核心:IoC/DI 容器 (ApplicationContext);
  • 目標:One-Stop-Shop 整合方案,子框架可插拔、可替換;
  • 原則:不重複造輪子 (無日誌、無連接池、無分布式事務協調器),整合現有優秀開源 (Commons Logging, DBCP, Hibernate, JTA 等);
  • 便攜性:支援 WebLogic, Tomcat, Resin, JBoss, WebSphere 等主流容器。

IoC/DI:依賴關係的控制反轉

核心表現形式

  • 高層模組不依賴低層模組,雙方依賴抽象;
  • 實現依賴抽象,而非抽象依賴實現;
  • 應用不依賴容器,容器服務於應用。

容器職責

  • 管理 Bean 生命週期 (實例化、屬性注入、初始化、銷毀);
  • 解析依賴圖,自動裝配 (Constructor/Setter/Field 注入);
  • 提供 Bean 作用域 (Singleton/Prototype/Request/Session/Application);

Spring 架構優勢七大支柱

優勢說明
有效組織中間層無論是否用 EJB,Spring 管理服務層對象,填補 Struts 等 Web 框架留白
消除 Singleton 濫用減少全局狀態,提升可測試性與 OO 純度
統一配置方式JavaBean 屬性替代分散的 properties/System.getProperty,IDE 友好
面向介面編程依賴介面而非實現類,耦合度降至近零
低 API 侵入業務對象無需繼承 Spring 基類、實現 Spring 接口
易於單元測試POJO 可獨立於容器實例化、注入 Mock 對象測試
EJB 成為選擇而非強制POJO + 本地 EJB 靈活切換,調用端無感

AOP:橫切關注點模塊化

  • 聲明式事務 (@Transactional) 替代 EJB 容器事務,單資料源場景無需 JTA;
  • 日誌、安全、效能監控、重試、幂等等橫切邏輯集中化;
  • Spring AOP 基於動態代理 (JDK/CGLIB),支援 AspectJ 注解/切點表達式。

全棧整合矩陣

領域Spring 方案可替換/整合第三方
Web MVCSpring MVCStruts 1/2, WebWork, JSF, Tapestry
持久化JdbcTemplate, HibernateTemplate, JpaTemplateHibernate, iBATIS/MyBatis, JDO, TopLink, JPA
事務PlatformTransactionManager + AOPJTA (多資源), 本地事務 (單資源)
消息JmsTemplate, @JmsListenerActiveMQ, RabbitMQ, IBM MQ, JMS 1.1/2.0
遠程調用RMI, Hessian, Burlap, HttpInvoker, JAX-RPC, JAX-WSSpring Cloud / gRPC / Dubbo (生態擴展)
安全Spring Security (原 Acegi)JAAS, CAS, OAuth2, OpenID Connect

Spring 不做的事 (有意留白)

  • 日誌實現 → 整合 Commons Logging / SLF4J / Log4j 2 / Logback;
  • 連接池 → 整合 DBCP / HikariCP / C3P0 / Tomcat Pool;
  • 分布式事務協調器 → 依賴應用服務器 JTA 或 Atomikos/Bitronix;
  • O/R Mapping 實現 → 整合 Hibernate/JPA/MyBatis。

Spring 的偉大在於「不爭搶、只整合、定標準、降門檻」。它用 IoC/DI 串起碎片化的 Java EE 生態,讓開發者聚焦業務而非基礎設施膠水代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved