Внедрить конфигурацию приложения grails в службу

Я создаю службу grails, которая будет взаимодействовать со сторонним REST API через библиотеку Java. Библиотеке Java требуются учетные данные для REST API с помощью URL-адреса, имени пользователя и пароля.

Я хотел бы сохранить эти учетные данные в configuration / Config.groovy , сделать их доступными для службы и убедитесь, что учетные данные доступны службе до того, как они потребуются.

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

package example

class ExampleController {

    def exampleService

    def index = { }

    def process = {
        exampleService.setCredentials(grailsApplication.config.apiCredentials)
        exampleService.relevantMethod()
    }
}


package example

import com.example.ExampleApiClient;

class ExampleService {

    def credentials

    def setCredentials(credentials) {
        this.credentials = credentials
    }

    def relevantMethod() {

        def client = new ExampleApiClient(
            credentials.baseUrl,
            credentials.username,
            credentials.password
        )

        return client.action();
    }
}

Я считаю, что этот подход немного ошибочен, поскольку он зависит от вызова контроллера setCredentials () . Автоматическое предоставление учетных данных службе было бы более надежным.

Является ли любой из этих двух вариантов жизнеспособным (в настоящее время я недостаточно знаком с grails):

  1. Ввести grailsApplication.config.apiCredentials в служба в контроллере при создании службы?

  2. Предоставить некоторую форму конструктора службы, которая позволяет передавать учетные данные службе во время создания экземпляра?

Внедрение учетных данных в службу является идеальным. Как это можно было сделать?

37
задан skaffman 12 February 2011 в 11:02
поделиться