星期四, 1月 19, 2006

Annotation

今天讀書會, 主要報告 JDK1.5 新增之 Annotation 功能。Annotation 是在程式碼中,可以加入一些資訊給 Framework 來處理。如下:

public class Test {

@Override
public String toString() {
return "Test";
}
}

上面所宣告的 @Override 即是 Annotation。用來跟 JDK 說,toString() method 是 override 的 method。此功能非常有用,當程式 compile 的時候,若該 method 並非是 override 的 method,則 JDK 會 compile 失敗。有時候我們常常會打錯字,這時候會照成 debug 的時間拉長,加上這個 Annotation,則可以幫助程式可讀性,compile 也會幫助驗證的工作。

不過,使用 JDK 本身提供的 Annotation 並不是這次的重點,這次的重點是自己開發一些 Annotation 來使用。

以驗證 Bean 為目標,利用 Annotation 來作為驗證 Bean 的工具。如下:

public class MyBean {

private String id;

@MinLength(1)
@MaxLength(value=10, memo="帳號長度必須小於 @value。", allowNull=false)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
}

我們只要這樣使用 Annotation 便可以驗證這個 bean 是否符合規定。Annotation 主要是可以透過反射(reflect)機制來取得資訊,所以可以取得像上面所輸入的 memo, allowNull 等資訊。
當然還要寫一個 Util 物件來做這些取得資訊並驗證的功能。

這次 Demo,分成三部份,第一部份是簡單的運作處理。讓大家可以了解如何做出一個 Annotation,及Runtime時期如何取得 Annotation 資訊來驗證。

第二部份則多加了 Meta-Annotation。表示是用在 Annotation 上面的 Annotation。目的在於讓此 Util 物件更加靈活。

第三部份則寫了一個簡單的 struts 程式。將這些 Annotation 用在 Form Bean 當中。並擴充 struts 的功能,讓他在處理 Action 之前,先驗證 Form Bean 的資料有無通過認證,若沒有通過認證,則導回到 input 頁。這部份是透過自行撰寫 RequestProcessor 子類別的方式來達成,並在 struts-config.xml 裡面的 controller 標籤內之 processorClass 屬性設定。

RequestProcessor 是 Struts 處理的重心,在這支程式可以看到許多 Struts 是怎麼處理這些 form, action 等過程。寫的並不難,都很好理解。我們自行繼承的子類別可以只 override 要"加工"的method。

透過這樣的方式,開發人員寫程式的方式就跟以前一模一樣,完全感覺不出差異。但是在 form bean沒通過驗證時,會自動把錯誤訊息帶到 input 頁面。讓開發過程更加方便快速。

當然,Struts 有一個 Vaildator 的外掛可以使用。也可以達到驗證 bean 的用途,甚至能在前端畫面就可以幫助驗證,非常好用。這次的範例只是為了顯示 Annotation 的用途。及一些概念。

如同之前講過的,公司通常會使用一些現成的Framework,但是這些 Framework 是很大眾化的,公司必須在此 framework 上面再架構出屬於公司的 framework,如此可以讓公司開發更加的方便快速,也可以有比較統一的作法。struts 提供了良好的擴充模式,可以好好利用。

另外,Annotation 也可以有 gen code的用途。必須使用 jdk1.5 提供的 apt 這個工具,不過這部份就還需要再研究了。
目前知道的是,J2SE 6.0 會把 apt 這個工具跟 javac 整合在一起,所以未來使用起來會更加的方便。

J2SE 5.0 目前好像很少人在用,大概是他的語法與 1.4 差異太大的原因。不過技術進步很快,能將 1.4 的轉成 5.0 的專案,應該要快點轉換,因為 jdk 是 free 的,沒有升級的成本問題。
不過在某些平台上,例如 AIX,可能 1.5 的版本就沒那麼快出來了。

Annotation 是很重要的功能,因為 J2EE 5.0 大幅使用 Metadata來簡化程式碼,例如 EJB3.0,也越來越多的專案是利用 Annotation 來運作,例如 AspectJ 5.0,JUnit 4.0。
不過這邊也只是要會用 Annotation 就可以。

本篇所說的,自行開發 Annotation 來用,是自行開發 Framework 時才必須考量的。

參考資料的網址中,有詳細的介紹,本次的實作概念來自此篇資料,不過此篇文章的範例寫的太過完美,功能也比我實作的強大多了,trace 下來要花不少時間,容易失去焦點。

參考資料:http://java.sun.com/developer/technicalArticles/J2SE/constraints/annotations.html

星期四, 1月 05, 2006

Google Suggest

Google Suggest 提供在輸入查詢關鍵字時, 有 Auto complete 的功能, 可以提示及預先得知查詢結果筆數.
目前還是 beta 版, 不過已經可以使用.

http://www.google.com.tw/webhp?complete=1&hl=en

真是好創意...Google 功能越來越強了...

另外, 在 Google 中找 "fy 英文單字", 可以英翻中. 超方便.