Разделите один внешний запрос на несколько внутренних и перенаправьте его на определенные обработчики. - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть сервис мыла с двумя способами:

SendRequestReques и GetRequestResponse

В каждом методе я получаю упакованный запрос с внутренним запросом (8 типов внутреннего запроса).Это может выглядеть так:

public SendRequestResponse sendRequest(SendRequestRequest request){

    if(request.getInternalrequestType().equals("RequestFirst"))
      RequestFirst requestFirst = marshaller.marsla(request.getInteRnalrequest());
      //send this reuest to concrete handler
    } else if(request.getInternalRequestType().equals("RequestSecond"))
      RequestSecond requestSecond= marshaller.marsla(request.getInternalrequest());
      //send this reuest to concrete handler
    } else if(request.getInternalrequestType().equals("RequestLast"))
      RequestLast requestLast= marshaller.marsla(request.getInternalRequest());
      //send this reuest to concrete handler
    }
   ...

Я использую шаблон стратегии:

InternalRequestHandler handler = internalrequestsResolver.getInternalRequestHandler(request.getInternalrequestType())
handler.process(request);

И в каждом обработчике реализуем маршалинд для создания логики класса и реализации.

Но теперь яхочу изменить его на аннотации.Я хочу создать обработчики для внутреннего запроса eacj:

@MyHandler(type = MyType.TYPE1)
@Component
public class MyFirstController {
  ...
}

И когда приложение весенней загрузки запустилось, я хочу найти все bean-компоненты с аннотациями @MyHandler и создать esolver / factory / etc с этими bean-компонентами.Таким образом, я все еще получаю шаблон стратегии.но создайте обработчики при запуске из аннотаций.Я не знаю, хорошая это идея или нет.но вопрос в том, как это сделать.и второй вопрос: как вы можете поступить иначе?

если абстрактно, то логика такова:

  1. Клиент отправляет запрос следующим образом:

    classExternalRequest {частный элемент any;//org.w3c.dom.Element содержит любой тип}

  2. Я получаю этот запрос в моем мыльном сервисе в методе:

public ExternalResponse request(ExternalRequest external request)

Я извлекаю типы internalRequest и InternalRequest этим типом.

Перенаправляю внутренний запрос определенному обработчику.

...