Grails 4 服务没有被注入到 Grails 数据服务中

Grails 4 service not being injected inside Grails Data Service

这是关于注入 数据服务 的 Grails 服务。问题是注入的服务在运行时为空。这是一个例子。

class MessagingService {

    def sendEmail(String message) {
      ...
    }
}
interface IFlowService {
    ...
}

@Service(Flow)
abstract class FlowService implements IFlowService {

    MessagingService messagingService

    void sendFoo() {
        messagingService.sendEmail(message)
    }
}

FlowServiceMessagingService 都位于 grails-app/services.

FlowService 调用 sendEmail 时出现 NPE,因为 messagingService 为空。

MessagingService 是手写的,与域无关。

本项目使用Grails 4.0.10,多次出现该问题。当通常的 Gails 魔法(即注入)不起作用时,我用 kludges 解决了前一两个问题,你知道,只是为了避免卡住。

现在在我看来这个问题是可以预见的,每次我编写与域无关的服务时都会发生。我错过了文档中的某些内容吗?处理此问题的适当方法是什么?

Kludge: 为了解决这个问题,我在有问题的服务中包含了一个方法 sayHi。它只是记录一条调试消息。我从 BootStrap 调用 sayHi 来检查它是否有效。确实如此,令人惊讶。然后我在 BootStrap 中添加代码,将服务分配给服务中应该注入的 属性 。 [战栗]

我尝试重现相同的-

interface IFlowService {

}
@Service(Flow)
abstract class FlowService implements IFlowService {

    MessagingService messagingService

    void hello() {
        println "hello"
        messagingService.hi()      // <- NPE
    }
}
class MessagingService {

    void hi() {
        println "hi"
    }
}

这似乎是 Grails 中的错误。但是您只需在服务中添加 @Autowired 即可轻松解决此问题(可能是一种解决方法)-

import org.springframework.beans.factory.annotation.Autowired

@Service(Flow)
abstract class FlowService implements IFlowService {

    @Autowired
    MessagingService messagingService

    void hello() {
        println "hello"
        messagingService.hi()      // <- No NPE
    }
}

它打印-