Разрешение параметров / преобразователь для динамически зарегистрированных команд - PullRequest
0 голосов
/ 20 января 2019

Я работаю над интерфейсом командной строки Spring Shell 2 и пытаюсь генерировать команды во время выполнения из определенного интерфейса посредством отражения.
Обновление: реализация интерфейса также генерируется во время выполнения.
Я использую ConfigurableCommandRegistry и MethodTarget для регистрации моей команды.
Есть ли способ настроить / зарегистрировать конвертеры ввремя выполнения для параметров метода, который передается в MethodTarget?
Каков наилучший подход для этого?

Я довольно новичок в Java и Spring, и я не уверен, возможно ли это вообще.Имейте это в виду, и, пожалуйста, не убивайте меня:)
Расширяющаяся Spring Shell документов отсутствует (неполная?)
Я уже проверил Spring shell , но проектне могу найти что-то для работы.
Может быть, это возможно с параметром Resolving?или создание конвертеров во время выполнения с помощью 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 (или более параметров)

Короче говоря, яхотел бы создать преобразователи для параметров, которые являются сложными объектами, и сгладить их.
Вложенные объекты игнорируются

1 Ответ

0 голосов
/ 21 января 2019

Любой бин Converter<String, Person> должен работать и автоматически выбираться Spring Shell.Взгляните на ConversionExample в примерах.

При этом, почему вы говорите, что хотите зарегистрировать все динамически ?Spring Shell предназначен для получения кода, снабженного специальными аннотациями (например, @ShellMethod).Хотя должна быть возможность динамически выполнять работу, которую выполняют стандартные регистраторы при просмотре этих аннотаций, из ваших примеров видно, что вы согласны с аннотацией кода с @ShellMethod уже?Так почему бы не позволить Spring Shell выполнить для вас обнаружение и регистрацию?

Другими словами: почему вы аннотируете интерфейс, а не метод реализации?Если вы это сделаете, вам не придется иметь дело с MethodTarget и т. Д., Все это будет сделано автоматически для вас Spring Shell.

Надеюсь, это прояснит ситуацию и окажется самым простым решением

...