使用Grails 3.2.3/3.2.6,我有一個問題,即Resources.groovy中配置的某些bean未注入到此文件中定義的服務中。 在現實生活中,這些配置服務之一是在測試環境中由測試郵件服務交換的郵件,另一個是執行程序服務以確保異步過程在測試模式下同步完成。該電子郵件是一個異步過程,它使用其他服務。Resources.groovy中的Grails bean未注入服務
我有一個控制器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
,控制器確實已經正確注入了bean並且工作正常。
我目前使用Holders.getGrailsApplication().mainContext.theOtherService.klet()
但我想避免使用全局變量避免這個問題...
爲什麼第一服務不注入第二個?