gpt4 book ai didi

resources.groovy 中的 Grails bean 未注入(inject)服务

转载 作者:行者123 更新时间:2023-12-02 14:00:06 27 4
gpt4 key购买 nike

使用 Grails 3.2.3/3.2.6,我有一个问题,即 Resources.groovy 中配置的某些 bean 没有注入(inject)到该文件中也定义的服务中。
在现实生活中,这些配置的服务之一是在测试环境中由测试邮件服务交换的邮件,另一个是执行器服务,以确保异步进程在测试模式下同步完成。电子邮件是一个异步进程,它使用其他服务。

Here is a sample project

我有一个 Controller OneController:

class OneController {
def theService
def theOtherService

def index() {
render status:200, text: theService.getDataFromOtherService()
}

def direct() {
render status:200, text: theOtherService.klet()
}
}

resources.groovy 文件定义了这些 def 的映射。 :
beans = {
theService(OneService)
theOtherService(AlternateSecondService)
}

这些服务非常简单:
class OneService {
def theOtherService

def getDataFromOtherService() {
theOtherService.klet()
}
}


class AlternateSecondService {

def klet() {
"Mariette"
}
}

现在,如果我访问 http://localhost:8080/one/index ,我在 theOtherService.klet() 上得到一个空指针异常因为 theOtherService一片空白。

如果我访问 http://localhost:8080/one/direct , Controller 确实正确注入(inject)了bean并且工作正常。

我目前通过使用 Holders.getGrailsApplication().mainContext.theOtherService.klet() 避免了这个问题但我想避免使用全局变量...

为什么第一个服务没有注入(inject)第二个服务?

最佳答案

问题是您的 theService bean 没有进行自动布线。实现这一目标的方法不止一种。您可以使用 Spring 注释,也可以在 resources.groovy 中执行类似的操作:

beans = {
theService(OneService) { bean ->
bean.autowire = 'byName'
}
theOtherService(AlternateSecondService)
}

关于resources.groovy 中的 Grails bean 未注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42417128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com