提到 Java,大家都會想到 Java 在服務器端應用開發(fā)中的使用。實際上,Java 在命令行應用的開發(fā)中也有一席之地。在很多情況下,相對于圖形用戶界面來說,命令行界面響應速度快,所占用的系統(tǒng)資源少。在與用戶進行交互的場景比較單一時,命令行界面是更好的選擇。命令行界面有其固定的交互模式。通常是由用戶輸入一系列的參數(shù),在執(zhí)行之后把相應的結(jié)果在控制臺輸出。命令行應用通常需要處理輸入?yún)?shù)的傳遞和驗證、輸出結(jié)果的格式化等任務。Spring Shell 可以幫助簡化這些常見的任務,讓開發(fā)人員專注于實現(xiàn)應用的業(yè)務邏輯。本文對 Spring Shell 進行詳細的介紹。
Spring Shell 入門
最簡單的創(chuàng)建 Spring Shell 應用的方式是使用 Spring Boot。從 Spring Initializr 網(wǎng)站(http://start.spring.io/)上創(chuàng)建一個新的基于 Apache Maven 的 Spring Boot 應用,然后添加 Spring Shell 相關的依賴即可。本文介紹的是 Spring Shell 2.0.0.M2 版本,目前還只是 Milestone 版本,因此需要在 pom.xml 中添加 Spring 提供的包含 Milestone 版本工件的 Maven 倉庫,如代碼清單 1 所示。否則的話,Maven 會無法找到相應的工件。
清單 1. 添加 Spring Shell 的 Maven 倉庫
<repositories> <repository> <id>spring-milestone</id> <name>Spring Repository</name> <url>https://repo.spring.io/milestone</url> </repository></repositories>
在添加了 Spring Shell 的 Maven 倉庫之后,可以在 Spring Boot 項目中添加對于spring-shell-starter 的依賴,如代碼清單 2 所示。
清單 2. 添加 Spring Shell 所需 Maven 依賴
<dependency> <groupId>org.springframework.shell</groupId> <artifactId>spring-shell-starter</artifactId> <version>2.0.0.M2</version></dependency>
我們接著可以創(chuàng)建第一個基于 Spring Shell 的命令行應用。該應用根據(jù)輸入的參數(shù)來輸出相應的問候語,完整的代碼如清單 3 所示。從代碼清單 3 中可以看到,在 Spring Shell 的幫助下,完整的實現(xiàn)代碼非常簡單。代碼的核心是兩個注解:@ShellComponent 聲明類GreetingApp 是一個 Spring Shell 的組件;@ShellMethod 表示方法 sayHi 是可以在命令行運行的命令。該方法的參數(shù) name 是命令行的輸入?yún)?shù),而其返回值是命令行執(zhí)行的結(jié)果。
清單 3. 輸出問候語的命令行應用
<dependency> <groupId>org.springframework.shell</groupId> <artifactId>spring-shell-starter</artifactId> <version>2.0.0.M2</version></dependency>
接下來我們運行該應用。運行起來之后,該應用直接進入命令行提示界面,我們可以輸入 help 來輸出使用幫助。help 是 Spring Shell 提供的眾多內(nèi)置命令之一,在列出的命令中,可以看到我們創(chuàng)建的 say-hi 命令。我們輸入"say-hi Alex"來運行該命令,可以看到輸出的結(jié)果"Hi Alex"。如果我們直接輸入"say-hi",會看到輸出的錯誤信息,告訴我們參數(shù)"--name"是必須的。從上面的例子可以看出,在 Spring Shell 的幫助下,創(chuàng)建一個命令行應用是非常簡單的。很多實用功能都已經(jīng)默認提供了。在使用 Spring Initializr 創(chuàng)建的 Spring Boot 項目中,默認提供了一個單元測試用例。這個默認的單元測試用例與 Spring Shell 在使用時存在沖突。在進行代碼清單 3 中的項目的 Maven 構(gòu)建時,該測試用例需要被禁用,否則構(gòu)建過程會卡住。
新聞熱點
疑難解答