Java grails3.3@Service注释没有为抽象服务生成bean?

Java grails3.3@Service注释没有为抽象服务生成bean?,java,spring,grails,Java,Spring,Grails,例如,我有这样的服务: @Service(MyDomain) abstract class MyDomainService { abstract List<MyDomain> list(Map args) .... } 而且,@Autowired对我不起作用 但我不知道为什么controller可以正确使用此服务: class MyController { MyDomainService myDomainService // it works } 我想在

例如,我有这样的服务:

@Service(MyDomain)
abstract class MyDomainService {
    abstract List<MyDomain> list(Map args)
    ....
}
而且,
@Autowired
对我不起作用

但我不知道为什么controller可以正确使用此服务:

class MyController {
    MyDomainService myDomainService  // it works
}
我想在其他服务中使用此服务。我该怎么办


谢谢。

在GORM数据服务中,您可以使用接口和抽象类,这里我引用文档

如果您遇到GORM不知道如何实现的方法, 然后,您可以使用抽象类提供一个实现

在您的示例中,您提供了一个可以由GORM实现的列表方法,因此您可以使用一个接口,例如使用Person域类作为示例

package app.demo

import grails.gorm.services.Service

@Service(Person)
interface IPersonService {
    List<Person> list()
}
通过这种方式,将服务注入到其他人或控制器中应该没有问题,例如,这里我在EmailService.groovy的EmailService中注入PersonService

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"
        }
    }
}

我在另一个服务和控制器中添加了该服务的注入示例,可能有些东西与您相关。我还附上了演示存储库,您会发现它很有用

谢谢。但它仍然不起作用。我试着跟随你的演示,但仍然没有bean,而且我不能将我的服务注入到另一个服务中。我知道。我又看了一遍医生。所以数据服务不是一个bean。如果使用抽象类作为数据服务,则无法使用
@Autowired
查找该服务。我必须注入
HibernateDatastore
并使用
BookService BookService=HibernateDatastore.getService(BookService)
来获得服务。我发现数据服务不能使用
@Autowired
注入到另一个服务中,因为它是AST转换。但是官方文件说,
你可以通过Spring自动连线获得服务:@autowiredbookservice BookService
。我试图这样做,但我得到了一个错误:
通过字段“paylogService”表示的未满足的依赖关系
我在答案中添加了更多信息,顺便问一下,我在这里使用的是grails 3.3.8如何将服务注入到另一个抽象类服务?
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()
    }
} 
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"
        }
    }
}
package app.demo

class PersonController {

    EmailService emailService

    def index() {
        emailService.send()

        render 'sending'
    }
}