фильтр для сервисов с графическим инжектором в архитектуре MVC - PullRequest
0 голосов
/ 06 июля 2018

У нас есть несколько модулей, каждый с несколькими услугами. Мы используем игровой фреймворк, и он хорошо работает с инжектором зависимости от сока.

например,

Для модуля x,

@implementedBy(XI1Impl.class)
interface XI1 {....}


class XI1Impl implements XI1
{....}

Теперь нам нужно добавить общий API проверки, прежде чем вызывать какой-либо сервисный API. Самый простой способ - добавить проверку вызова внутри реализации метода для каждого API для каждого сервиса для каждого модуля.

Есть ли лучший способ добавить общую проверку для служб, чтобы приложение-потребитель при внедрении какой-либо службы и сначала вызывало API службы, должен выполнить вызов проверки.

Имеет ли Guice какие-либо аннотации или какой-либо способ настроить вызов API проверки таким образом, чтобы при внедрении службы он сначала выполнял определенный вызов.

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

Пожалуйста, предложите мне, если возможно написать логику, которая может выполнять общие проверки для всех методов выбранного сервиса без изменения реализации API его сервиса.

Заранее спасибо.

1 Ответ

0 голосов
/ 08 июля 2018

Кажется, вы хотите запустить какой-то фрагмент кода перед вызовом вашей сервисной функции, попробуйте это.

  1. Вам необходимо создать класс и функцию, которая будет содержать вашу функцию, которая будет выполняться каждый раз перед фактическим вызовом службы

    class FilterService {
        def apply(block: => Any => Any) = {
            println("This block will run before actual function call.")
            block()
        }
    }
    
  2. Теперь вы должны использовать это в вашем сервисе

    class ActualService @Inject()(filterService: FilterService){
        def actualFunction(str: String) = filterService.apply { data =>
            // `data` you can use if you are returing anything from your filter service function.
            println("In actual function calling.")
            str
        }
    }
    

Надеюсь, это поможет :)

...