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)
}
}
FlowService
和 MessagingService
都位于 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
}
}
它打印-
这是关于注入 数据服务 的 Grails 服务。问题是注入的服务在运行时为空。这是一个例子。
class MessagingService {
def sendEmail(String message) {
...
}
}
interface IFlowService {
...
}
@Service(Flow)
abstract class FlowService implements IFlowService {
MessagingService messagingService
void sendFoo() {
messagingService.sendEmail(message)
}
}
FlowService
和 MessagingService
都位于 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
}
}
它打印-