*** 第一個階段子目標 ***
- 確實在 Eclipse IDE工具內建立可以完整開發 Spring-based 的應用程式。
- 新增 middle-tier性質專案(純粹是 java class,沒有 UI),撰寫 {員工薪資管理Control.java} 這個控制物件的程式碼框架 (skeleton),新增一個 Spring Beans 的 XML設定檔 (config file),在設定檔內設定該控制物件的相關屬性。
- 利用 JUnit 測試框架 (Test Framework, Eclipse 內建),馬上撰寫該控制物件的功能測試程式碼。
一、新增專案
- 選擇 [File]→[New]→[Project…],當出現 [New Project] 的 wizard 對話框時,選擇 [Spring]→「Spring Project」,然後按下【Next】,出現 [New Spring Project] 對話框內,輸入新增的專案名稱: HRDemo,其它選項照預設即可,按下【Finish】完成,並將 eclipse的視界 (perspective)切至 Java EE。
- 在 [Project Explorer] 的專案視窗內,將滑鼠移至專案的根目錄 (HRDemo)下,右鍵點選 [Build Path]→[Configure Build Path …],出現 [Properties for HRDemo]的對話框,然後將標籤切換至 [Libraries],並點擊【Add Libraries…】,當出現 [Add Library] 對話框後,選擇 [User Library] 然後點擊 【Next】。
出現 [User Library] 對話框後,點擊 【User Libraries…】,再點擊 【New…】,在 [New User Library] 的對話框內填入自訂的 Library 名稱,在此例填入:「Spring 2.x Framework」 完成後點擊 【OK】。
點擊 【Add JARs】。Spring-based 的專案,至少必須載入三個相關的 jar: spring.jar, commons-logging.jar, log4j-1.2.14.jar。此三個檔案位於在上述所解壓縮 Spring Framework Library (此例目錄為 C:\java\lib\spring-framework-2.X),路徑內的 /dist, /lib/Jakarta-commons, /lib/log4j 目錄下。
二、撰寫類別控制程式碼
- 從 [Project Explorer] 專案視窗內,按下滑鼠右鍵,選擇 [New]→[Class],在 [New Java Class] 對話框內,在 「Package」欄位內,填入: hr.demo.hsdc;在 「Name」欄位內,填入:員工薪資管理Control。
- 在 eclipse 程式碼編輯視窗內,撰寫下列 java 程式碼:
員工薪資管理Control.java
package hr.demo.hsdc; import java.util.ArrayList; public class 員工薪資管理Control { public float 計算員工薪資(String id){ return 0f; } public ArrayList 計算所有員工薪資(){ return null; } }
*** 在這個階段重點是建立程式碼框架,而不是在細節的正確性。所以只要宣告好該控制類別所需要的功能 (method)、參數、回傳值即可;至於 method 內實做的細節,在建立起整個開發環境的框架後,再回頭來補充實做細節即可。(這是 Iteration 作法關鍵之所在,知道每一個階段的重點目標為何)
- 新增第一個 Java Class 程式後,eclipse IDE 的 Java EE視界如下圖所示:
三、新增 Spring Beans 設定檔 (Config File)
- 從 [Project Explorer] 專案視窗內,按下滑鼠右鍵,選擇 [New]→[Other…],然後在 Wizard 對話框內,選擇 [Spring]→[Spring Bean Definition] ,然後點擊 [Next]。
在出現的對話框內的 [File Name] 填入自訂的設定檔名稱 (在本例中為 beans-config),並選擇該檔案儲放的位置在 src 目錄下。
點擊 [Next],在出現選擇 XSD namespace的對方框內,點選 [bean] 後,在下方的對話框,改選 XSD 定義為符合 Spring 2.0 (spring-beans-2.0.xsd),然後點擊 [Finish] 完成。
圖 11、改選符合 spring 2.0 規格的 XSD 定義此時在 [Project Explorer] 專案視窗 src 目錄下,即會新增一個 beans-config 檔。在程式碼編輯視窗下編輯該設定檔內容為:
beans-config:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="EmpControl" class="hr.demo.hsdc.員工薪資管理Control"> </bean> </beans>
- 值得留心的是,若程式碼有用到中文名稱 (如中文類別名稱),那就必須變更 eclipse 預設的編碼,否則在設定檔內有中文名稱的話,會出現 “Invalid byte 1 of 1-byte UTF-8 sequence” 的錯誤訊息。在 eclipse 的功能表 [Project]→[Properties],點選 [Resources],在右邊的「Text file encoding」,把原來是系統預設的編碼,改為 “UTF-8”。
四、撰寫控制類別的測試程式碼
在 eclipse 環境下要撰寫測試程式碼是非常簡單的一件事。原因是 eclipse 已內建了 JUnit 測試框架 (JUint Test Framework),作為一位程式撰寫人員,最起碼要為每一個控制性的功能(服務)性類別撰寫功能測試程式碼 (functional test code),可以說是軟體品質的最基本保障,也是應該要具備的責任與良心了。
- 在 [Project Explorer] 內,選擇 {員工薪資管理Control.java},按下滑鼠右鍵,選擇 [New]→[Other…],然後在 Wizard 對話框內,選擇 [JUnit]→[JUnit Test Case] ,然後點擊 [Next]。在出現的對話框內,填入以下資訊:
- 點選 「New JUnit 4 Test」。 (新版本的測試框架可以根據 Java 5.0 以上版本的新特徵特性來建構;更簡單、易於使用,以及更敏捷的初始化與清理等工作)
- Package: hr.demo.hsdc.test (端看 Developer 的習慣,這裡是採用將測試程式碼均放置於原始程式碼所在位置的子目錄下)
- Name:員工薪資管理ControlTest (測試類別命名的建議為 原類別名稱+Test)
- 勾選 setUp() method (讓測試類別可進行初始化的工作)
點擊 【Next】,在出現「選擇測試的 method」對話框時,點選該控制類別所宣告的 method (此例為 “計算員工薪資()”、”計算所有員工薪資()”。 一般而言,功能測試的重心會在於測試功能性類別所揭露出的企業邏輯(business logic),這些企業邏輯的演算核心均會被封裝 (encapsulate)在功能性類別所宣告的 method 內。
- 編輯測試程式碼內容
員工薪資管理ControlTest.java
package hr.demo.hsdc.test; import static org.junit.Assert.*; import org.junit.*; import hr.demo.hsdc.*; public class 員工薪資管理ControlTest { private 員工薪資管理Control control; @Before public void setUp() throws Exception { control = new 員工薪資管理Control(); } @Test public void test計算員工薪資() { assertEquals(0f, control.計算員工薪資("001")); } @Test public void test計算所有員工薪資() { assertEquals(null, control.計算所有員工薪資()); } }
- 執行測試。
在 eclipse 的工具列 (toolbar)中,選擇 [RUN] (綠色右箭頭符號圖示),在此例中點選「員工薪資管理ControlTest」後,在下方的 [JUnit] 標籤即可顯示測試的結果。 (綠棒代表通過;若有至少一個錯誤,則會出現紅棒)
*** 至此已完成第一階段子目標 ***
整個專案目錄備份至 /Stage-1 目錄下。 程式碼下載
※延伸參考
o Java Spring 簡單範例操作與學習指引〈1〉
Hello Chris:
若只是要知道有無 static 的使用法,那麼 google 一下就可以知道如何用了。
但是,您這個問題倒讓我思考到 “why static” 這個地方來了,而且似乎不容易回答呢。 !^^
我比較傾向能透過生活化的哲理來解釋這個問題,不過,真的需要讓我好好想想,屆時再另發文公佈心得。
Kenming 老師:
可以請教您嗎? 在Java裡宣告變數或method時,有static跟沒有static差別在哪裡?
謝謝 🙂
Hi pogi:
目前是沒有這個計畫的。 ^^。
請問有預計要開 Java EE、JBoss Seam 之類的課程嗎?
Hi D.K.
這個不是用 “看” 的,這篇算是 “How-to” 文,所以要一步步實作來練習的。 🙂
看的頭都昏了…)
謝謝你分享新的技術~