Spring 是開源框架,旨在解決企業級應用開發複雜性。核心優勢:**分層架構**——可按需選擇組件,同時為 J2EE 開發提供整合框架。
| 模組 | 核心職責 | 關鍵組件/特性 |
|---|---|---|
| 核心容器 | Bean 生命週期管理、依賴注入 | BeanFactory (工廠模式)、ApplicationContext、IOC/DI |
| Spring Context | 框架級上下文服務 | JNDI、EJB、郵件、國際化、驗證、排程 |
| Spring AOP | 面向切面程式設計 | 聲明式事務、切點/通知/切面、無需 EJB 即可實現事務管理 |
| Spring DAO | JDBC 抽象與異常層次 | DataAccessException 體系、簡化連接開關、統一異常處理 |
| Spring ORM | ORM 框架整合 | JDO、Hibernate、iBATIS SQL Maps、統一事務/DAO 異常層次 |
| Spring Web | Web 應用上下文 | Struts 整合、multipart 解析、請求參數綁定到領域物件 |
| Spring MVC | 全功能 Web MVC 框架 | 策略介面高度可配置、支援 JSP/Velocity/Tiles/iText/POI 等視圖技術 |
每個模組可獨立使用或組合使用。核心理念:**支援不綁定特定 J2EE 服務的可重用業務/資料訪問物件**,可在 Web/EJB/獨立應用/測試環境間無縫遷移。
基本思想: 不在代碼中直接 new 物件,而是在配置文件中描述「誰需要誰」,由 IOC 容器負責實例化、裝配、管理生命週期。
| 模式 | 描述 | 優點 | 缺點 |
|---|---|---|---|
| Setter 注入 | 無參構造器 + setter 方法 | 直觀、可選依賴、可重新配置 | 構造後物件可能未完全初始化 |
| 構造器注入 | 帶參構造器強制依賴 | 不可變性、強制完整性、循環依賴易檢測 | 參數多時簽名複雜 |
| 介面注入 | 實現特定介面由容器注入 | 低耦合 | 侵入性強、已淘汰 |
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="username" value="root"/>
<property name="password" value="secret"/>
</bean>
<bean id="userDao" class="com.example.UserDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userService" class="com.example.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
@Configuration
@ComponentScan("com.example")
public class AppConfig {
@Bean
public DataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUsername("root");
ds.setPassword("secret");
return ds;
}
}
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="serviceOps" expression="execution(* com.example.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOps"/>
</aop:config>
無需 EJB 即可獲得企業級聲明式事務管理。
第二部分:深入 IOC 容器進階特性(Bean 作用域、生命週期回調、FactoryBean、Aware 接口、事件發布、資源抽象)。
第三部分:Spring AOP 進階(@AspectJ 註解風格、切點表達式詳解、事務傳播行為、異常處理切面)。
Spring 以 IOC 容器管理物件生命週期、DI 實現鬆耦合、AOP 模組化橫切關注點 三大支柱,重新定義了 Java 企業級開發範式。掌握七大模組職責、XML/Java 雙配置風格、Setter/構造器注入選型、AOP 核心術語與聲明式事務配置,即可踏上 Spring 實戰之路。