1

我正在开发一个 Spring Shell 2 CLI,我试图在运行时通过反射从定义的接口生成命令。
更新:接口的实现也是在运行时生成的。
我正在使用 ConfigurableCommandRegistry 和 MethodTarget 来注册我的命令。
有没有办法在运行时为传递给 MethodTarget 的方法的参数设置/注册转换器?
这样做的最佳方法是什么?

我对 java 和 spring 很陌生,我不确定这是否可能。请记住这一点,请不要杀了我 :)文档
扩展 Spring Shell丢失(不完整?)
我已经检查了Spring shell 项目,但找不到可以使用的东西。
也许这可以通过参数解析来实现?或在运行时使用 FormatterRegistrar 生成转换器?

注册命令如下

MethodTarget command = new MethodTarget(method, client, new Command.Help(description, group), availabilityIndicator);
registry.register(commandName, command);

方法和方法参数、客户端、描述、组是通过接口的反射检索的。

我想在运行时从接口生成命令


public interface MessagingManagement {
  @ShellMethod(...)
  public void createPerson(@ShellOption(...)Person person);
}

可以使用以下参数调用 create-person --person name age (或更多参数)

简而言之,我想为复杂对象的参数生成转换器并将它们展平。
嵌套对象被忽略

4

1 回答 1

0

任何 bean 都Converter<String, Person>应该工作并被 Spring Shell 自动拾取。查看示例中的ConversionExample

话虽如此,您为什么说要动态注册所有内容?Spring Shell 旨在获取使用其特殊注释(如 eg @ShellMethod)注释的代码。虽然应该可以动态地完成标准注册商在看到这些注释时所做的工作,但从您的示例看来,您已经可以对代码进行注释@ShellMethod了吗?那么为什么不让 Spring Shell 为你做发现和注册呢?

换句话说:为什么要注释接口而不是实现方法?如果你这样做了,你就不必处理MethodTarget等等,这一切都是由 Spring Shell 自动为你完成的。

希望这可以澄清事情并证明是最简单的解决方案

于 2019-01-21T11:41:40.347 回答