命令
在本节中,我们将介绍实际的命令注册,并将命令选项和执行留到文档的后面。您可以在 Command Registration 中找到更详细的信息。
章节摘要
📄️ 注册
定义命令有两种不同的方式:通过注解模型和通过编程模型。在注解模型中,你在类中定义方法,并用特定的注解来标注类和方法。在编程模型中,你使用更底层的方法,定义命令注册(既可以作为bean,也可以通过动态注册到命令目录中)。
📄️ 编程式
在编程模型中,可以通过定义 CommandRegistration 为一个 @Bean,它将被自动注册。
📄️ 注释
@Command 注解用于方法上时,会将其标记为命令注册的候选方法。在下面的例子中,定义了一个名为 example 的命令。
📄️ 旧版注释
当你使用标准API时,bean中的方法会被转换为可执行的命令,前提是:
📄️ 组织命令
当你的 shell 开始提供大量功能时,你可能会有很多命令,这可能会让你的用户感到困惑。通过输入 help,他们会看到一个令人畏惧的命令列表,按字母顺序排列,这可能并不总是展示可用命令的最佳方式。
📄️ 命令可用性
注册的命令并不总是有意义,这取决于应用程序的内部状态。例如,可能有一个下载命令,但它只有在用户已连接到远程服务器后才能工作。现在,如果用户尝试使用下载命令,shell 应该解释该命令存在,但此时不可用。Spring Shell 允许你这样做,甚至让你提供一个简短的解释,说明命令不可用的原因。
🗃️ 异常处理
3 个项目
📄️ 别名
可以为命令定义别名。这在你想创建命令的简短版本或在保持旧命令暂时可用的情况下进行完整命令重命名时非常方便。
📄️ 隐藏命令
可以隐藏一个命令,这在命令尚未准备好投入使用、用于调试目的或出于其他任何不想宣传其存在的原因时非常方便。
📄️ 帮助选项
Spring Shell 有一个内置的帮助命令,但并不是所有人都喜欢从中获取命令帮助,因为你总是需要带上目标命令的参数来调用它。在许多 CLI 框架中,每个命令都有选项 --help 和 -h 来打印命令帮助,这是很常见的。
📄️ 交互模式
命令注册可以定义 InteractionMode,依据 shell 正在执行的模式来隐藏命令。有关更多信息,请参见 Interaction Mode。
🗃️ 内置命令
8 个项目
📄️ 写作
当需要将内容写入控制台时,您可以始终使用 JDK 的 System.out,它会直接写入 JDK 自己的流。另一个推荐的方法是使用 JLine 的 Terminal,并从中获取 writer 实例。