我正在创建一个 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
到控制器中的服务中?在服务上提供某种形式的构造函数,允许在实例化时将凭据传递给服务?
将凭据注入服务是理想的。怎么可能做到这一点?