深入瞭解 Roo,極致提升 Java 開發效率

工程 | Ben Alex | 2009 年 5 月 1 日 | ...

更新:“Spring Roo 介紹” 部落格系列的 第二部分 現已釋出,其中包含詳細的分步教程,可幫助您開始使用 Roo。第三部分 詳細介紹了 Roo 的內部架構。

本週 Twitter 圈因 SpringOne Europe 傳來的訊息而熱鬧非凡。其中一項引起廣泛關注的公告是 SpringSource 的全新開源生產力工具,代號為“Roo”。

Roo 是一款精密的往返式程式碼生成器,它能讓建立和演進 Spring 應用程式比您想象的更快更容易。即使您對程式碼生成有所保留,Roo 仍然值得一試。它包含重要的創新,解決了對程式碼生成的所有主要反對意見,同時仍能提供最佳實踐的 Spring 應用程式,並在應用程式的整個生命週期內保持有用。

這是系列部落格的第一篇,我將討論 Roo,首先是它的總體設計目標和功能,然後是它的使用方法和 Roo 的工程內部原理。考慮到這第一篇部落格是介紹性的,讓我們先重複一下指導 Roo 開發的使命宣言

Roo 的使命是在不損害工程完整性或靈活性的前提下,從根本上、可持續地提高 Java 開發人員的生產力。

這如何轉化為一個工具呢?一位見過 Roo 的會議代表將其描述為“一個坐在後臺處理我不願操心的事情的小精靈”。這個描述特別恰當,原因有二。首先,Roo 確實很“小巧”。它的當前下載大小不到 3 兆位元組,它讓您可以繼續使用您正常的基於 Spring 的 Java 程式設計模型,並且不需要您採用特殊的 Roo 執行時或構建技術。其次,它確實靜靜地坐在後臺為您處理事務。最重要的是,Roo 不會妨礙您。如果您想自己寫一些東西,只管去做,Roo 會默默地負責自動調整相關檔案以作響應(即 Roo 支援往返)。如果您想編輯 Java 或 JSP 檔案,只管去做。Roo 不需要您使用它的介面。或者如果您想停止使用 Roo,只需退出程式即可。Roo 不會成為您構建系統或執行時的一部分,因此在您萬一想要停止使用它的情況下,停止使用 Roo 異常容易。

我們相信 Roo 正好填補了現有 IDE 的強大功能、現代 Web RAD 框架所展示的生產力潛力以及 Java 開發人員對擁有一個按他們希望的方式工作並反映他們所重視的工程原則的強烈渴望之間的空白。這產生了一個非侵入式的後臺工具,它非常容易學習使用,可以應用於現有專案和新專案,並以非凡的速度簡化世界最佳實踐應用程式的開發。

生產力和可用性

當您擁有易於學習並基於您現有知識、技能和經驗的高可用性工具時,更容易提高生產力並享受開發過程。因此,在設計 Roo 時,可用性對我們來說是一個關鍵的設計因素。我們受到開發者透過 Tab 鍵補全使用者介面(如 *nix shell 提示符)獲得的顯著生產力優勢的影響。但我們更進一步,專門為 Roo 編寫了一個 shell。透過提供一個 shell(而不是 GUI 或命令列工具),我們能夠實現一個可指令碼化、使用者友好、易於學習、容錯性強的介面。您可以在任何不確定的時候按下 TAB 鍵,Roo 會完成命令。您可以在需要時輸入“hint”並獲得針對專案階段的指導。您可以省略命令中的選項,Roo 會根據您最近的操作自動推斷您的意圖。您可以輸入非法命令,Roo 會小心地撤銷失敗命令可能造成的任何更改。您可以編寫指令碼並重新執行它來再次生成您的專案。您甚至不需要完整輸入命令——只需輸入足夠讓 Roo 將其識別為唯一的部分即可。而且,您無需安裝 IDE 即可從作業系統命令提示符執行所有這些操作。

當然,大多數 Java 開發人員都使用 IDE,並認為它們對其生產力至關重要。因此 Roo 認識到這一點,並在您在 IDE 中處理專案時愉快地繼續執行。您不需要任何 Roo 特定的 IDE 外掛(儘管我們確實有 SpringSource Tool Suite 的外掛,我將在下面進一步討論)。當然,在您的 IDE 中,您會享受 Roo 設計的便利,它透過程式碼輔助和除錯支援使您的 Java 開發生活變得輕鬆。您的偵錯程式會像往常一樣執行,單步執行構成應用程式的所有程式碼——包括 Roo 幫助生成的檔案。Roo 生成的每個原始檔都將正確出現在程式碼輔助(Ctrl + Space)列表中,因此您無需記住方法簽名。

由於 Roo 支援您使用 Java 程式設計,您將獲得正常的增量驗證,這有助於我們所有人識別缺失的括號或輸入錯誤的欄位名。IDE 重構工具將繼續為您服務,即使面對大型開發團隊、不斷變化的團隊成員以及多年的持續開發和維護,也能確保應用程式程式碼質量保持高水平。最後,目前所有 Roo 註解都採用“Roo*”的命名約定。這種命名約定確保您在需要時可以輕鬆找到註解——儘管您實際上根本不需要輸入任何 Roo 特定的註解。註解本身為您提供了對 Roo 如何幫助您開發的非常細粒度的控制,如果您願意,可以詳細控制成員名稱和自定義行為(預設設定也很好用)。

在 SpringSource Europe 大會上,我們還在 SpringSource Tool Suite (STS) 中演示了 Roo 的用法,STS 是我們流行且即將免費提供的基於 Eclipse 的 IDE。這使您可以在 IDE 中享受 Roo 的所有好處。您可以在螢幕底部的“Roo 檢視”中輸入命令,並立即在您的 Package Explorer 和編輯器中看到更改。或者您可以在編輯器中進行更改,並立即在 Roo 檢視中看到 Roo 對您的更改所做的響應。它就是那個坐在您不礙事的地方,為您處理您不想操心的事情的小精靈。

技術功能

Roo 構建在外掛架構之上,支援構建不同型別的 Java 應用程式。目前有大約 18 個“外掛”,這些外掛旨在支援輕鬆開發帶有獨立的基於 JPA 的實體層的請求-響應式 MVC Web 應用程式。Roo 目前包含的一些具體功能如下:

  • 從空目錄開始一個新的應用程式(Roo 也可以處理現有應用程式)
  • 配置構建系統並設定特定於該構建系統的專案結構(我們最初支援 Maven 2)
  • 安裝您選擇的 JPA 提供者和資料庫
  • 檢視和配置資料庫連線詳情
  • 設定 Log4J 配置檔案,並允許使用 TAB 鍵補全命令對其進行修改
  • 建立享受自動依賴注入和持久化方法的 JPA 實體
  • 向 JPA 實體新增欄位,包括自動設定 JPA 以及新的 Bean Validation (JSR 303) 標準所需的正確註解
  • 管理自動 JUnit 整合測試,即使實體之間存在關聯並應用了 Bean Validation 約束,這些測試也能立即透過
  • 建立和維護仔細遵循 REST 約定的基於 Spring MVC 的控制器,包括為這些控制器生成和維護 JSP 頁面
  • 生成您可以自行完成的 Spring MVC 控制器存根,省去了您查詢此類控制器中最常用註解、約定和方法簽名的需要
  • 在您的實體上動態建立查詢器(finders),以便您無需編寫 JPA 查詢語言即可生成典型的“findByField1LikeOrField2Between(Field1 like, Field2 from, Field2 to)”風格查詢
  • 輕鬆安裝和配置 Spring Security(只需輸入“security setup”並按回車鍵)

所有這些功能都建立在 Roo 內部的元資料模型之上,該模型是您專案的全面表示。因此,雖然 IDE 等技術提供了成員結構模型,但 Roo 透過提供反映常見開發約定的企業應用程式特定元資料,將其提升到了更高的抽象層次。例如,雖然 IDE 可能知道有一個名為“Foo”的類,其中包含一個名為“persist”的方法,該方法定義了某些引數和返回型別,但 Roo 也擁有這些資訊,幷包含一系列額外的元資料,例如該方法從邏輯角度的含義。

由於元資料模型,我們將在後續版本中新增到 Roo 的功能將顯著擴充套件,超越請求-響應式 Web 應用程式開發。透過此元資料模型實現的可能性非常廣泛,例如包括第四代 Web 應用程式(基於元件、客戶端執行技術)的往返管理、往返式 UML 整合、替代持久化模型(例如針對雲計算最佳化)以及往返式富客戶端。

參與其中!

歡迎您參與 Roo。雖然我們已經發布了 Roo alpha 版本,但這只是一個非常早期的預覽。我們目前正在進行一項投票,以便社群可以就名稱提供反饋。恰如其分的是,投票應用程式是在 SpringOne Europe 的主題演講期間現場開發並部署到雲端的。您可以在 http://www.springsource.org/roo 找到這些資源的連結。

正如部落格開頭所提及的,我將在未來幾周內釋出更多部落格,詳細介紹Roo 的用法,以及內部架構和外掛的編寫方法。在此期間,歡迎您透過 Twitter 上的 #roo 話題標籤關注我們的工作。

希望您喜歡使用 Roo。

獲取 Spring 新聞簡報

訂閱 Spring 新聞簡報,保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲取支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一次簡單訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視全部