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