Spring Shell CLI 使用指南
- 作者
1. 概述
Spring Shell是一个用于构建功能完整的命令行界面(CLI)的框架。它提供了一个交互式shell,可以处理命令并利用Spring编程模型。
本文将介绍Spring Shell的主要特性, 包括:
- 创建自定义命令
- 命令可用性控制
- 参数处理
- Shell定制
- 类型转换
2. Maven依赖
首先,我们需要添加 Spring Shell 的依赖:
<dependency>
<groupId>org.springframework.shell</groupId>
<artifactId>spring-shell</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
3. 访问Shell
有两种主要方式可以访问Shell:
- 在应用入口点引导Shell:
public static void main(String[] args) throws IOException {
Bootstrap.main(args);
}
- 以编程方式去执行命令:
Bootstrap bootstrap = new Bootstrap();
JLineShellComponent shell = bootstrap.getJLineShellComponent();
shell.executeCommand("help");
4. 创建命令
4.1 添加自定义命令
我们可以通过在Spring组件中添加@CliCommand
注解的方法来创建自定义命令:
@Component
public class SimpleCLI implements CommandMarker {
@CliCommand(value = { "web-get", "wg" })
public String webGet(@CliOption(key = "url") String url) {
return getContentsOfUrlAsString(url);
}
@CliCommand(value = { "web-save", "ws" })
public String webSave(
@CliOption(key = "url") String url,
@CliOption(key = { "out", "file" }) String file) {
// 实现保存逻辑
return "Done.";
}
}
4.2 命令可用性控制
使用@CliAvailabilityIndicator
注解可以动态控制命令的可用性:
private boolean adminEnabled = false;
@CliAvailabilityIndicator("web-save")
public boolean isAdminEnabled() {
return adminEnabled;
}
@CliCommand("admin-enable")
public String adminEnable() {
adminEnabled = true;
return "Admin commands enabled.";
}
4.3 必需参数
使用mandatory
属性可以将参数设为必需:
@CliOption(key = { "out", "file" }, mandatory = true)
4.4 默认参数
空的key
值可以将参数设为默认值:
@CliOption(key = { "", "url" })
4.5 帮助信息
可以为命令和选项添加帮助信息:
@CliCommand(value = "web-get", help = "获取URL内容")
public String webGet(
@CliOption(key = "url", help = "要获取内容的URL")
String url) {
// ...
}
5. Shell定制
可以通过实现以下接口来定制Shell:
- BannerProvider: 自定义启动横幅
- PromptProvider: 自定义提示符
- HistoryFileNameProvider: 自定义历史文件名
6. 类型转换
Spring Shell为常见类型提供了默认转换器。我们也可以实现Converter
接口来添加自定义类型转换:
@Component
public class URLConverter implements Converter<URL> {
// 实现转换逻辑
}
7. 总结
本文介绍了Spring Shell的核心功能,包括创建自定义命令、控制命令可用性、参数处理、Shell定制以及类型转换。通过这些特性,我们可以使用Spring Shell构建功能丰富的命令行应用。
完整的示例代码可以在GitHub上找到。
分享内容