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

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

Я довольно новичок в Java и 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 имя age (или более параметров)

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

1 ответ

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

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

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

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

Другие вопросы по тегам