В сервисах данных GORM вы можете использовать интерфейсы абстрактных классов, здесь я цитирую документацию
Если вы столкнетесь с методом, который GORM не знает, как реализовать,
тогда вы можете предоставить реализацию, используя абстрактный класс.
В вашем примере вы предоставляете метод списка, который может быть реализован GORM, чтобы вы могли использовать интерфейс, например, и иметь класс домена Person в качестве примера try
package app.demo
import grails.gorm.services.Service
@Service(Person)
interface IPersonService {
List<Person> list()
}
Если вам нужно реализовать метод, который GORM не знает как, то вы можете попробовать, например, PersonService.groovy
package app.demo
import grails.gorm.services.Service
interface IPersonService {
List<Person> list()
}
@Service(Person)
abstract class PersonService implements IPersonService {
List<Person> find(final String name) {
Person.where { name == name }.list()
}
}
Таким образом, не должно быть проблем при внедрении служб в другие или в контроллеры, например, здесь я внедряю PersonService в EmailService по адресу EmailService.groovy
package app.demo
class EmailService {
PersonService personService
void send() {
List<Person> personList = personService.find('ana')
personList.each { Person person ->
println "Sending email to $person.name $person.email"
}
}
}
А в контроллере впрыскивает EmailService
package app.demo
class PersonController {
EmailService emailService
def index() {
emailService.send()
render 'sending'
}
}
Я добавил пример внедрения службы в другой сервис и в контроллер, возможно, есть что-то, что относится к вам. Я также прилагаю демонстрационный репозиторий. Я надеюсь вы найдете это полезным