【发布时间】:2011-06-25 19:49:55
【问题描述】:
我正在创建一个 grails 服务,它将通过 Java 库与第 3 方 REST API 进行交互。 Java 库通过 url、用户名和密码需要 REST API 的凭据。
我想将这些凭据存储在 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 不够熟悉):
在创建服务时将
grailsApplication.config.apiCredentials注入到控制器中的服务中?在服务上提供某种形式的构造器,允许在实例化时将凭据传递给服务?
将凭据注入服务是理想的。这怎么可能?
【问题讨论】:
-
如果有某种方法可以注入实际的配置属性而不是整个 grailsApplication 对象,那仍然会很好。