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

JSF 構建 Apache Geronimo 應用程式(五):整合 Spring Framework 實現依賴注入與業務邏輯分離

     編輯:Java 相關知識

本系列最後一篇,示範如何將 Spring Framework 整合至現有 JSF 應用程式(開發人員論壇註冊範例),利用 Spring 的依賴注入(DI)與 Bean 管理能力,增強應用程式的模組化與可測試性。

Spring Framework 核心優勢

  • 輕量級容器管理應用程式物件生命週期
  • 依賴注入(DI)實現鬆耦合,透過設定檔動態組裝協作物件
  • 交易管理抽象層、JDBC 抽象層、整合 Hibernate/iBATIS/JDO 等 ORM
  • AOP 支援橫切關注點(交易、日誌、安全等)
  • MVC Web 框架、遠端存取、JMX、排程、郵件、快取等企業級功能

Spring 體系架構

現有 devSignup JSF 應用程式回顧

專案結構包含:web.xml、faces-config.xml、geronimo-web.xml、signup.jsp、SignupData.java(Managed Bean)。JSF 由 Apache MyFaces 實現,搭配 Tomahawk 元件庫。

關鍵設定檔片段:

<!-- faces-config.xml -->
<managed-bean>
  <managed-bean-name>signupData</managed-bean-name>
  <managed-bean-class>devSignup.SignupData</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>...</navigation-rule>

Eclipse 中的 devSignup 專案

整合 Spring MVC 步驟

1. 於 Eclipse 專案加入 Spring 函式庫

  • 專案右鍵 Properties → JSF Library References → New,名稱 "Spring Framework",版本 v1_1。
  • Add JAR:spring.jar(含所有模組)或依需求挑選模組化 JAR(core、beans、context、web、aop 等)。

在 devSignup 專案中添加 Spring 建立 Spring Framework 庫引用

2. 修改 web.xml:註冊 Spring ContextLoaderListener

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

啟動 Spring 根 WebApplicationContext,載入 applicationContext.xml 定義的 Bean。

3. 修改 faces-config.xml:啟用 Spring 變數解析器

<application>
  <variable-resolver>org.springframework.web.jsf.DelegatingVariableResolver</variable-resolver>
</application>

DelegatingVariableResolver 優先解析 Spring Bean,失敗再委派給 JSF 預設解析器,實現 JSF 與 Spring Bean 互通。

4. 於現有 Managed Bean 註入 Spring Bean

於 signupData 定義新增 managed-property:

<managed-property>
  <property-name>hash</property-name>
  <value>#{genHash.hash}</value> <!-- 參照 Spring Bean genHash 的 hash 屬性 -->
</managed-property>

5. 新增 applicationContext.xml(置於 WEB-INF)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "https://www.springframework.org/dtd/spring-beans.dtd">
<beans>
  <bean id="signupData" class="devSignup.SignupData" lazy-init="true"/>
  <bean id="genHash" class="devSignup.HashGenerator" lazy-init="true"/>
</beans>

lazy-init="true" 表示 Bean 於首次使用時才建立。

6. 擴充 SignupData.java:新增 hash 屬性

private String _hash = null;
public String getHash() { return _hash; }
public void setHash(String h) { _hash = h; }

7. 建立新 Spring Bean:HashGenerator

package devSignup;
import javax.faces.context.FacesContext;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.jsf.FacesContextUtils;

public class HashGenerator {
    public void setHash(String h) { /* 唯讀 Bean,忽略設定 */ }
    public String getHash() {
        ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
        try {
            SignupData bean = (SignupData) ctx.getBean("signupData");
            return Integer.toString(bean.getScreenName().hashCode());
        } catch (NoSuchBeanDefinitionException e) { return "no-data-bean"; }
        catch (javax.faces.FacesException e) { return "no-screen-name"; }
    }
}

HashGenerator 透過 Spring ApplicationContext 取得 JSF Managed Bean signupData,計算其 screenName 雜湊值。展示 Spring Bean 可存取 JSF Bean、反之亦然的雙向整合。

8. 修改 signup-success.jsp 顯示注入結果

<p>
  Your application was successful, ${signupData.screenName}, welcome to our forums!<br>
  Your hash is ${signupData.hash}.
</p>

部署與驗證

  1. Eclipse Build Project → Export → WAR file 輸出 devSignup.war。
  2. Geronimo 管理主控台(https://localhost:8080/console/,預設 server/manager)卸載舊版 → Deploy New 上傳新 WAR。
  3. 訪問 https://localhost:8080/devSignup/signup.faces,填寫表單送出,成功頁將顯示個人化歡迎訊息與 Spring Bean 計算的雜湊值。

導出 WAR 文件 個人化成功頁面

結語

本教程示範了將 Spring Framework 整合至 JSF 應用程式的完整步驟:註冊 ContextLoaderListener、設定 DelegatingVariableResolver、定義 Spring Bean、於 JSF Managed Bean 注入 Spring Bean、編寫 Spring Bean 存取 JSF Bean。透過此整合,開發者可利用 Spring 的 DI、AOP、交易管理、ORM 整合等企業級功能,構建更健壯、可維護的 Java EE 應用程式。本系列五篇教程涵蓋 MyFaces、Tomahawk、ajax4jsf、Trinidad、Spring 五大技術整合,為 JSF on Geronimo 開發提供完整實戰指引。

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