У меня есть сервис мыла с двумя способами:
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-компонентами.Таким образом, я все еще получаю шаблон стратегии.но создайте обработчики при запуске из аннотаций.Я не знаю, хорошая это идея или нет.но вопрос в том, как это сделать.и второй вопрос: как вы можете поступить иначе?
если абстрактно, то логика такова:
Клиент отправляет запрос следующим образом:
classExternalRequest {частный элемент any;//org.w3c.dom.Element содержит любой тип}
Я получаю этот запрос в моем мыльном сервисе в методе:
public ExternalResponse request(ExternalRequest external request)
Я извлекаю типы internalRequest и InternalRequest этим типом.
Перенаправляю внутренний запрос определенному обработчику.