最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Shell應用程序開發(fā)流程解析

 更新時間:2020年10月22日 11:46:08   作者:賈樹丙  
這篇文章主要介紹了Spring Shell應用程序開發(fā)流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

向shell提供命令非常簡單,需要學習的注解很少。該命令的實現(xiàn)風格與使用依賴注入的應用程序的開發(fā)類相同,您可以利用Spring容器的所有特性來實現(xiàn)您的命令類。

  spring-shell官網(wǎng)地址:https://projects.spring.io/spring-shell/

 標記接口

  創(chuàng)建命令的第一步是實現(xiàn)標記接口CommandMarker,并使用Spring的@Component注解對類進行注解(注意一個JIRA問題:提供@CliCommand元注解避免使用標記接口)。使用helloworld示例應用程序中的代碼為例,HelloWorldCommands類的代碼如下所示:

@Component
public class HelloWorldCommands implements CommandMarker {
 // use any Spring annotations for Dependency Injection or other Spring interfaces
 // as required.
 // methods with @Cli annotations go here
}

日志

  目前,日志記錄是使用JDK日志記錄的。由于控制臺、JLine和Ansi處理的復雜性,一般都建議將消息作為返回值的方式顯示在shell窗口。但是,當需要進行日志記錄時,典型的JDK logger聲明就足夠了。

@Component
public class HelloWorldCommands implements CommandMarker {

 protected final Logger LOG = Logger.getLogger(getClass().getName());

 // methods with @Cli annotations go here

}

  注意:一般開發(fā)人員的職責是為第三方庫處理日志,應當要減少日志級別,這樣控制臺或者shell窗口就不會受到日志消息的影響。

 CLI注解

  在方法和方法參數(shù)上使用了三個注釋,這些注釋定義了與shell交互的主要契約,分別是:

  • CliAvailabilityIndicator - 放在一個方法前返回一個布爾值,表示在shell中是否可以執(zhí)行一個特定的命令。這個決定通?;谥皥?zhí)行的命令的歷史。它可以防止在滿足某些先決條件時出現(xiàn)外部命令,例如執(zhí)行'configuration'命令。
  • CliCommand - 放置在向shell提供命令的方法上。它的值提供了一個或多個字符串,這些字符串作為特定命令名的開始。在整個應用程序中,包括所有的插件中這些必須是唯一的。
  • CliOption - 放置在命令方法的參數(shù)中,允許它默認值聲明參數(shù)值為必填的或可選的。

  下面是在命令類中使用這些注解的簡單用法

@Component
public class HelloWorldCommands implements CommandMarker {

 @CliAvailabilityIndicator({"hw simple"})
 public boolean isCommandAvailable() {
  return true;
 }

 @CliCommand(value = "hw simple", help = "Print a simple hello world message")
 public String simple(
  @CliOption(key = { "message" }, mandatory = true, help = "The hello world message")
  final String message,

  @CliOption(key = { "location" }, mandatory = false,
        help = "Where you are saying hello", specifiedDefaultValue="At work")
  final String location) {

  return "Message = [" + message + "] Location = [" + location + "]";

 }
}

注解@CliAvailabilityIndicator方法返回true,這是這個類中暴露給shell調(diào)用的唯一的命令。如果類中有更多的命令,則將它們作為逗號分隔值列出。

  @CliCommand注解是創(chuàng)建shell命令'hw simple'。幫助消息是如果您使用幫助命令'help'將會打印什么內(nèi)容。這里定義方法名是“simple”,但它可以是任何自定義的名稱。

  @CliOption注解在每個命令的參數(shù)。您需要決定哪些參數(shù)是必需的,哪些是可選的,如果它們是可選的,則有一個默認值。在本例中,該命令有兩個參數(shù):消息'message'和位置'location'。需要使用消息選項,并提供一個幫助消息,以便在為該命令完成任務時為用戶提供指導。

  “simple”方法的實現(xiàn)很簡單,只是一個日志語句,但這是通常調(diào)用的其他對象,這些對象是通過Spring注入到類中的,然后可以實現(xiàn)復雜的功能。

  本例中的方法參數(shù)類型是String,它不會出現(xiàn)類型轉(zhuǎn)換的任何問題。您可以指定任何的對象類型以及基本數(shù)據(jù)類型,如int, float等。對所有類型以外由默認shell(基本數(shù)據(jù)類型, Date, File)需要在您的插件中與容器的轉(zhuǎn)換器接口org.springframework.shell.core.Converter 注冊它的轉(zhuǎn)換。

  注意,方法返回參數(shù)可以是非void,在我們的示例中,它是我們想要顯示的實際消息。返回非void類型時,shell將顯示為它的toString()字符。

測試shell命令

  執(zhí)行測試的shell命令,您可以實例化shell在一個測試用例中執(zhí)行命令,然后在返回值CommandResult執(zhí)行斷言。一個簡單的基類設置如下所示:

public abstract class AbstractShellIntegrationTest {

 private static JLineShellComponent shell;

 @BeforeClass
 public static void startUp() throws InterruptedException {
 Bootstrap bootstrap = new Bootstrap();
 shell = bootstrap.getJLineShellComponent();
 }

 @AfterClass
 public static void shutdown() {
 shell.stop();
 }

 public static JLineShellComponent getShell() {
 return shell;
 }

}

  這里有一個測試日期命令的例子:

public class BuiltInCommandTests extends AbstractShellIntegrationTest {

 @Test
 public void dateTest() throws ParseException {

 //Execute command
 CommandResult cr = getShell().executeCommand("date");

 //Get result
 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL,Locale.US);
 Date result = df.parse(cr.getResult().toString());

 //Make assertions - DateMaters is an external dependency not shown here.
 Date now = new Date();
 MatcherAssert.assertThat(now, DateMatchers.within(5, TimeUnit.SECONDS, result));
 }
}

  CommandResult的getResult方法返回的 java.lang.Class將匹配與@CliCommand注解方法的返回值。您應該向適當?shù)念愋娃D(zhuǎn)換,以幫助執(zhí)行您的斷言。

構(gòu)建和運行shell

  在我們看來,構(gòu)建和執(zhí)行shell最簡單的方法是剪切和粘貼腳本。這將使來自于分級的應用程序插件創(chuàng)建一個bin目錄,該目錄帶有用于windows和Unix的啟動腳本,并將所有依賴jar放在lib目錄中。Maven有一個類似的插件——AppAssembler插件。

  shell的主類是org.springframework.shell.Bootstrap的。只要您在類路徑上放置其他的插件,或者是獨立開發(fā)的,引導類就會將它們合并到shell中。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • oracle數(shù)據(jù)庫導入TXT文件方法介紹

    oracle數(shù)據(jù)庫導入TXT文件方法介紹

    這篇文章主要介紹了oracle數(shù)據(jù)庫導入TXT文件方法介紹,文中向大家展示了具體代碼示例,需要的朋友可以參考下。
    2017-09-09
  • Java按照添加順序的集合幾種方法詳解

    Java按照添加順序的集合幾種方法詳解

    這篇文章主要介紹了Java按照添加順序的集合幾種方法的相關(guān)資料,文中介紹了Java中五種常用的數(shù)據(jù)結(jié)構(gòu)(ArrayList、LinkedList、LinkedHashSet、LinkedHashMap、Stream)及其特點,適合不同的應用場景,需要的朋友可以參考下
    2024-12-12
  • Java中雙向鏈表詳解及實例

    Java中雙向鏈表詳解及實例

    這篇文章主要介紹了Java中雙向鏈表詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java多線程開發(fā)工具之CompletableFuture的應用詳解

    Java多線程開發(fā)工具之CompletableFuture的應用詳解

    做Java編程,難免會遇到多線程的開發(fā),但是JDK8這個CompletableFuture類很多開發(fā)者目前還沒聽說過,但是這個類實在是太好用了,本文就來聊聊它的應用吧
    2023-03-03
  • JDBC的ResultSet使用說明

    JDBC的ResultSet使用說明

    今天小編就為大家分享一篇JDBC的ResultSet使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • intelij?idea?2023創(chuàng)建java?web項目的完整步驟

    intelij?idea?2023創(chuàng)建java?web項目的完整步驟

    這篇文章主要給大家介紹了關(guān)于intelij?idea?2023創(chuàng)建java?web項目的完整步驟,該教學主要針對各位剛剛接觸javaweb開發(fā)的小伙伴,各位學習java的朋友也難免會經(jīng)歷這個階段,需要的朋友可以參考下
    2023-10-10
  • Java集合-HashMap

    Java集合-HashMap

    這篇文章主要介紹了Java集合HashMap,也叫散列表,是一種非常重要的數(shù)據(jù)結(jié)構(gòu),應用場景及其豐富,許多緩存技術(shù)(比如memcached)的核心其實就是在內(nèi)存中維護一張大的哈希表,下面來看看文章的具體內(nèi)容吧,需要的小伙伴也可參考一下
    2022-01-01
  • Java中Arrays.asList()方法詳解及實例

    Java中Arrays.asList()方法詳解及實例

    這篇文章主要介紹了Java中Arrays.asList()方法將數(shù)組作為列表時的一些差異的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 淺談一下Java中的訪問修飾符以及作用

    淺談一下Java中的訪問修飾符以及作用

    這篇文章主要介紹了淺談一下Java中的訪問修飾符以及作用,修飾符修飾的是“被訪問”的權(quán)限,所有修飾符都可以修飾成員變量,方法,構(gòu)造方法,需要的朋友可以參考下
    2023-05-05
  • 詳解Java集合中的基本數(shù)據(jù)結(jié)構(gòu)

    詳解Java集合中的基本數(shù)據(jù)結(jié)構(gòu)

    總有小伙伴讓我總結(jié)一下Java集合中的基本數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識,今天特地整理了本篇文章,文中有非常詳細的介紹,需要的朋友可以參考下
    2021-06-06

最新評論

桦南县| 汉中市| 雷波县| 巴青县| 上思县| 锦屏县| 施秉县| 新密市| 贺州市| 沂水县| 杨浦区| 镇宁| 宣汉县| 上蔡县| 芜湖县| 于田县| 英山县| 兴和县| 长岛县| 吴忠市| 张家界市| 新乡县| 青神县| 大厂| 遂平县| 嘉黎县| 丹凤县| 墨竹工卡县| 湘潭市| 和平县| 乌苏市| 承德市| 安平县| 建昌县| 喀喇沁旗| 深圳市| 寿宁县| 柳州市| 汉川市| 永康市| 房山区|