本系列首篇,介紹 Spring 框架整體架構、七大核心模組、控制反轉(IoC)核心模式,以及 Spring 與 Apache Geronimo 為何能完美互補。為後續實戰教程奠定理論基礎。
Spring 不僅處理 Web 層(如 Struts),更涵蓋業務層、持久層、AOP、事務管理等企業級開發全方位需求。其分層架構讓您可按需採用單一模組或完整堆疊。
| 模組 | 核心功能 | 關鍵類/介面 |
|---|---|---|
| Core 核心容器 | IoC 容器,管理 Bean 生命週期與依賴關係 | BeanFactory, ApplicationContext, XmlBeanFactory |
| Context 應用上下文 | 擴展 BeanFactory,提供企業級服務(JNDI、EJB、國際化、事件傳播、資源載入) | ApplicationContext, WebApplicationContext |
| AOP 面向切面 | 將橫切關注點(事務、日誌、安全)模組化,支援聲明式事務 | MethodInterceptor, ProxyFactoryBean, TransactionProxyFactoryBean |
| DAO 資料存取 | JDBC 抽象層,統一例外階層,支援程式化/聲明式事務 | JdbcTemplate, JdbcDaoSupport, DataAccessException |
| ORM 物件關係映射 | 整合 Hibernate、JDO、iBATIS、TopLink、OJB,提供模板類與資源管理 | HibernateTemplate, SqlMapClientDaoSupport, LocalSessionFactoryBean |
| Web Flow | 宣告式定義 Web 應用流程(有限狀態機),支援重用與多框架整合 | FlowController, XmlFlowRegistryFactoryBean, FlowExecutorImpl |
| Web MVC | 請求導向 MVC 實作,策略介面豐富(HandlerMapping、Controller、ViewResolver 等) | DispatcherServlet, SimpleUrlHandlerMapping, Controller, InternalResourceViewResolver |
// 從檔案系統載入組態
Resource resource = new FileSystemResource("beans.xml");
XMLBeanFactory beanFactory = new XMLBeanFactory(resource);
// 從 Classpath 載入
Resource cpResource = new ClassPathResource("beans.xml");
XMLBeanFactory beanFactory = new XMLBeanFactory(cpResource);
<beans>
<bean id="myBean" class="com.example.MyClass">
<property name="dependency" ref="anotherBean"/>
</bean>
<bean id="anotherBean" class="com.example.AnotherClass"/>
</beans>
繼承 BeanFactory,新增:AOP 整合、訊息資源(i18n)、資源訪問、事件傳播、WebApplicationContext 等。除非記憶體極度受限,建議優先使用 ApplicationContext。
Spring 內建隔離的 AOP 框架,不強制使用。核心概念:切面、連接點(方法呼叫)、通知(Before/After/Around)、切入點(正則)、織入(執行期)。預打包 聲明式事務管理 切面,提供類 EJB CMT 功能但適用於 POJO。
JdbcTemplate:模板模式封裝資源管理與例外轉換DataAccessException 階層JdbcDaoSupport 基類簡化 DAO 實作HibernateDaoSupport、JdoDaoSupport、SqlMapClientDaoSupportPlatformTransactionManager 介面統一 JDBC/Hibernate/JTA 事務<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="XXXX"/>
<property name="password" value="YYYY"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources"><list><value>product.hbm.xml</value></list></property>
<property name="hibernateProperties">...</property>
</bean>
<bean id="employeeDao" class="emp.EmployeeDaoImpl">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>
傳統自由導航與受控流程混雜難以建模。SWF 以有限狀態機定義流程,XML 外部化,支援重用於 Struts、JSF、Spring MVC、Portlet 等環境。優點:構造清晰、生命週期受管、流程可視化、易於整合。
圍繞 DispatcherServlet(前端控制器)設計,關鍵策略介面:
高度抽象使測試極易,IoC 組態統一管理 Web 層依賴。
Spring 以 IoC 為核心,解決 J2EE/Java EE 開發通用難題,靈活適用於標準環境之外。掌握七大模組與依賴注入思想,即可在 Geronimo 上構建清晰、可測試、可維護的企業級應用。準備好迎接第二部分的實戰之旅了嗎?