Grails 数据服务无法使用常规服务

标签 grails

又一个 Covid 日快乐。当我使用 generate-all 时,Grails 会为我创建数据服务。我开始了解什么是数据服务。
我也有自己的服务供我的 Author 和 Book 类使用。我将我的服务命名为 ImportService。在数据服务将我的书籍保存到数据库之前,我在 ImportService 中有一些方法可以清理从 CSV 文件中读取的书籍数据。我还按照说明使数据服务成为抽象类。因此,我可以将自己的方法放入数据服务中。
由于 Author 有自己的 AuthorService,而 Book 也有自己的 BookService,我希望不同的 Data Service 访问我 ImportService 中的方法。因此,我不必多次复制和粘贴导入 CSV 代码。所以,我把行 进口服务 importService 在 AuthorServie 类和 BookService 类中。这并不顺利。 进口服务 在数据服务类中始终为 NULL。我谷歌这个问题。他们说我不能向 grails.gorm.services.Service 注入(inject)其他服务。
有一个帖子说做 bean 。我是 Grails 的新手。即使发布了代码,我也不知道他们在说什么。我的部分背景是汇编语言、C 和 Pascal。我的脑海里充满了诸如自上而下、子程序、库、地址和指针之类的术语。我不知道 Bean 是什么。
这就是事实。我想知道这是一个错误还是设计使您无法向 gorm 服务注入(inject)服务。
感谢您的“指针”。

最佳答案

请参阅 https://github.com/jeffbrown/tom6502servicedi 上的项目.该项目使用 Grails 4.0.3 和 GORM 7.0.7。
https://github.com/jeffbrown/tom6502servicedi/blob/main/grails-app/services/tom6502servicedi/ImportService.groovy

package tom6502servicedi

class ImportService {

    int getSomeNumber() {
        42
    }
}
https://github.com/jeffbrown/tom6502servicedi/blob/917c51ee173e7bb6844ca7d40ced5afbb8d9063f/grails-app/services/tom6502servicedi/AuthorService.groovy
package tom6502servicedi

import grails.gorm.services.Service
import org.springframework.beans.factory.annotation.Autowired

@Service(Author)
abstract class AuthorService {

    @Autowired
    ImportService importService

    // ...

    int getSomeNumberFromImportService() {
        importService.someNumber
    }
}
https://github.com/jeffbrown/tom6502servicedi/blob/917c51ee173e7bb6844ca7d40ced5afbb8d9063f/grails-app/controllers/tom6502servicedi/AuthorController.groovy
package tom6502servicedi

import grails.validation.ValidationException
import static org.springframework.http.HttpStatus.*

class AuthorController {

    AuthorService authorService

    // ...

    def someNumber() {
        render "The Number Is ${authorService.someNumberFromImportService}"
    }
}
someNumber 发送请求操作将验证 ImportService被注入(inject) AuthorServiceAuthorService被注入(inject) AuthorController .
$ curl http://localhost:8080/author/someNumber
The Number Is 42

关于Grails 数据服务无法使用常规服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64603577/

相关文章:

spring - Spring JMS ActiveMQ使用什么来确定代理何时应切换“排他消费者”?

java - 没有tomcat或任何其他servlet容器的Groovy Grails独立应用程序

grails - Grails丢弃域对象

grails - grails自定义标签将html标签作为字符串文字

grails - 无法在grails中使用progresql

java.lang.String 无法转换为 java.util.Map$Entry 且分页缺少必需的属性

angularjs - 带有Angularjs1.5的Grails 3.2列表未返回所有记录

hibernate - 如何用Groovy域实现身份生成器

deployment - 将 J2EE/Grails 应用程序作为 Windows 桌面应用程序运行

grails - 已弃用的 Grails 插件