#grails
#grails
Вопрос:
С очередным днем Covid. Когда я использую generate-all, Grails создает для меня службу данных. Я начинаю понимать, что такое служба передачи данных.
У меня также есть свой собственный сервис для использования моими авторскими и книжными классами. Я называю свою службу ImportService. У меня есть методы в ImportService для очистки данных моей книги, прочитанных из файла CSV, прежде чем служба данных сохранит мои книги в базе данных. Я также следую инструкции, чтобы сделать службу данных абстрактным классом. Итак, я могу поместить свой собственный метод в службу данных.
Поскольку у автора есть свой собственный AuthorService, а у книги есть свой собственный BookService, я хочу, чтобы другая служба данных имела доступ к методу в моем ImportService. Таким образом, мне не нужно копировать и вставлять код импорта CSV несколько раз. Итак, я помещаю строку ImportService importService в класс AuthorServie и класс BookService. Это не очень хорошо. importService всегда имеет значение NULL внутри классов службы данных. Я Гуглю проблему. Они говорят, что я не могу внедрить другую службу в grails.gorm.services.Обслуживание.
Существует сообщение, в котором говорится о создании компонента. Я новичок в Grails. Я понятия не имею, о чем они говорят, даже с опубликованными кодами. Часть моего опыта — это язык ассемблера, C и Pascal. Моя голова заполнена жаргоном, таким как «сверху вниз», «Подпрограмма», «Библиотека», «адрес» и «указатель». Я понятия не имею, что такое компонент.
Вот что это такое. Мне интересно, является ли это ошибкой или по замыслу, что вы не можете внедрить службу в службу gorm.
Спасибо за ваш «указатель».
Комментарии:
1. Вы не указали, какую версию Grails или какую версию GORM вы используете, поэтому я не знаю, актуально это или нет, но в GORM была соответствующая ошибка, которую мы недавно исправили. См. github.com/grails/gorm-hibernate5/issues/202 .
2. Я использую Grails 4.0.3. Я новичок в Grails. Я не знаю, где искать версию GORM. Не могли бы вы показать мне, где можно получить версию GORM, пожалуйста? Спасибо! Я использовал Grails 4.0.4, но он продолжал сбоить. Кто-то предложил откатиться к 4.0.3. Вот почему я использую 4.0.3.
3. «Не могли бы вы показать мне, где взять версию GORM, пожалуйста?» — Трудно сказать, не глядя на вашу сборку, но место, где версия GORM по умолчанию будет указана в Grails 4.0.3, будет в
gradle.properties
файле в верхней части проекта.4. Спасибо. Это номер версии. Является ли это причиной проблемы, из-за которой я не могу использовать службу в службе данных? grailsVersion=4.0.3 gorm.version=7.0.6.RELEASE
5. Я считаю, что исправление находится в версии 7.0.7.RELEASE.
Ответ №1:
Смотрите проект на https://github.com/jeffbrown/tom6502servicedi . В этом проекте используются Grails 4.0.3 и GORM 7.0.7.
package tom6502servicedi
class ImportService {
int getSomeNumber() {
42
}
}
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
}
}
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
вводится в AuthorService
и AuthorService
вводится в AuthorController
.
$ curl http://localhost:8080/author/someNumber
The Number Is 42
Комментарии:
1. Вау! Это чудо! Полностью противоречит закону физики!!! Добавление импорта org.springframework.beans.factory.annotation. Автоматическое подключение и слово @Autowired к службе данных создают Grails, чтобы теперь получить ссылку на мой класс ImportService. T-H-A-N-K-S!!!