又一个 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.groovypackage 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.groovypackage 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) AuthorService
和 AuthorService
被注入(inject) AuthorController
.$ curl http://localhost:8080/author/someNumber
The Number Is 42
关于Grails 数据服务无法使用常规服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64603577/