Spring 面試必備:核心概念、模組架構與優勢全解析
1. 什麼是 Spring 框架?主要模組有哪些?
Spring 是一個為 Java 應用開發提供全方位基礎支援的輕量級平台。它解決了企業級開發中的基礎設施難題 (如事務管理、資源整合),讓開發者專注於業務邏輯。Spring 本身遵循設計模式精心打造,整合無負擔。
截至目前 Spring 已整合 20+ 個模組,主要分為以下七大類別:
- 核心容器:Beans、Core、Context、SpEL (Spring Expression Language)
- 資料存取/整合:JDBC、ORM、OXM、JMS、Transaction
- Web:WebSocket、Servlet、WebFlux、Portlet
- AOP (面向切面程式設計):AOP、Aspects、Instrumentation
- 工具:Test、TestSupport
- 訊息:Messaging、STOMP
- 測試:Mock、TestContext

2. 使用 Spring 框架的核心優勢
- 非侵入式設計:業務邏輯不依賴 Spring API,易於測試與遷移。
- 控制反轉 (IoC) / 依賴注入 (DI):降低組件耦合,促進鬆散耦合架構。
- AOP 支援:將横切關注點 (事務、日誌、安全) 模組化,提升程式碼復用。
- 豐富的企業級整合:無縫整合 MyBatis、Hibernate、JPA、Redis、Kafka 等主流技術棧。
- 宣告式事務管理:透過
@Transactional 簡化事務邊界控制。
- 方便的測試支援:提供
SpringJUnit4ClassRunner、Mock 物件等測試工具。
- 模組化設計:按需引入,輕量靈活。
面試加分點:深入理解 IoC 容器啟動流程
- 讀取配置 (XML / JavaConfig / 註解掃描)
- 解析 Bean 定義,建立
BeanDefinition 註冊表
- 實例化 Bean (構造器/工廠方法) → 屬性填充 → 初始化 (
@PostConstruct, InitializingBean) → AOP 代理建立
- 註冊銷毀回調 (
@PreDestroy, DisposableBean)
- 容器就緒,提供
getBean() 服務
常見追問
- BeanFactory vs ApplicationContext:前者延遲載入,後者啟動時預實例化 Singleton,並提供國際化、事件發布、資源載入等企業級功能。
- Spring 如何解決循環依賴?:三級快取 (singletonObjects, earlySingletonObjects, singletonFactories) + 提前曝光 ObjectFactory。
- @Autowired vs @Resource vs @Inject:前者按類型裝配 (Spring 專有),後兩者按名稱裝配 (JSR-250/JSR-330 標準)。