Command Registration
定义命令注册是介绍命令及其选项和参数结构的第一步。这与后来发生的事情(例如解析命令行输入和运行实际目标代码)大体无关。从本质上来说,这是向用户展示的命令 API 的定义。
Commands
spring-shell
结构中的命令被定义为一个命令数组。这产生了一个类似于以下示例的结构:
command1 sub1
command2 sub1 subsub1
command2 sub2 subsub1
command2 sub2 subsub2
目前如定义子命令,我们不支持对显式父项映射命令。例如, |
Interaction Mode
Spring Shell 被设计为以两种模式工作:交互式(其本质上是 REPL
,其中你有 shell 实例贯穿于一系列命令)和非交互式(其中命令从命令行逐个执行)。
这些模式之间的差异主要围绕在每种模式下可以执行的操作的限制。例如,如果 shell 不再处于活动状态,显示命令的先前堆栈跟踪将不可行。通常,shell 是否仍处于活动状态决定了哪些信息可用。
此外,处于活动 REPL
会话中可能会提供有关用户在活动会话中已经做了 чего 的更多信息。
Options
选项可以定义为长选项和短选项,其前缀分别为 --
和 -
。以下示例显示长选项和短选项:
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandRegistrationSnippets.java[]
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandRegistrationSnippets.java[]
Target
目标定义命令的执行目标。它可以是 POJO 中的方法、 Consumer
或 Function
。
Method
在现有 POJO 中使用 Method
是定义目标的一种方法。考虑以下类:
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandTargetSnippets.java[]
考虑到前面清单中显示的现有类,然后你可以注册其方法:
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandTargetSnippets.java[]
Function
使用 Function
作为目标提供了很大的灵活性来处理命令执行中的内容,因为你可以使用给定 Function
的 CommandContext
手动处理很多事情。然后, Function
的返回类型将作为结果打印到 shell 中。考虑以下示例:
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandTargetSnippets.java[]
Consumer
使用 Consumer
基本上与使用 Function
相同,区别在于没有返回类型。如果你需要将某内容打印到 shell 中,你可以从上下文获取 Terminal
的引用并通过它打印某内容。考虑以下示例:
Unresolved include directive in modules/ROOT/pages/appendices/techintro/registration.adoc - include::../../../../../src/test/java/org/springframework/shell/docs/CommandTargetSnippets.java[]