Использование отражения в методе весеннего сервиса - PullRequest
1 голос
/ 17 марта 2019

Я зарегистрировал сервис в моей весенней заявке.У меня есть несколько методов с почти одинаковой номенклатурой.Поэтому я использую рефлексию для их вызова, чтобы избежать использования if else.Ниже аналогичный сценарий.

@Service
public class MyService {
  public List<String> getEmployee(String type) {
    Class myServiceClass = Class.forName("MyService");
    Class partypes[] = new Class[1];
    partypes[0] = String.class;
    Method meth = myServiceClass.getDeclaredMethod("getEmpBy"+type, partypes);
    Object arglist[] = new Object[1];
    arglist[0] = type;
  meth.invoke(this, arglist);
  }
}

Теперь у меня есть методы с номенклатурой как getEmpByName, getEmpByAddress, getEmpByQualification .Чтобы избежать, если я еще хочу использовать отражение, но приведенный выше код не дает возможности загрузить MyService во время выполнения.

1 Ответ

0 голосов
/ 18 марта 2019

TLDR
Этот дизайн ужасен.Используйте интерфейс вместо отражения.

Подробнее
Вы используете Spring.
Spring рад внедрять зависимости в ваши контроллеры.
Spring почти наверняка гарантирует лучшую работу по внедрениюваши зависимости, чем у вас при выполнении рефлексии.
Интерфейс вызова вашей службы фиксирован (обратите внимание, что вы жестко запрограммировали как типы параметров, так и порядок параметров), что, что интересно, совпадает с интерфейсом.

...