我在插件“ A”中有一个名为EmailImplService的服务,该服务实现了名为EmailService的接口。 EmailImplService使用的服务是接口(SubService)。在插件实现(扩展grails.plugins.Plugin的类)中,我具有以下设置:
Closure doWithSpring() {
{ ->
emailService(EmailImplService) {
subService = ref('subImplAService')
}
}
}
在插件“ B”中,我有一个使用EmailService的服务(UsingEmailService),但应该使用SubService接口(SubImplBService)的其他实现。 因此,我在主应用程序的resources.groovy中尝试了以下操作:
myEmailService(EmailImplService) { bean ->
subService = ref('subImplBService')
}
该应用程序正常启动,但subService是SubImplAService的实例,而不是SubImplBService的实例。因此,显然我的方法行不通。我记得在春天,可以在这里使用构造函数注入,因为这会使这里发生的事情更加明显。 Grails可能发生或者我的方法中缺少什么?
interface EmailService {
def sendEmail()
}
class EmailImplService {
SubService subService
}
interface SubService {
def doStuff()
}
class SubImplAService {
def doStuff() {
}
}
class SubImplBService {
def doStuff() {
}
}
class UsingEmailService {
@Autowired
@Qualifier('myEmailService')
EmailService emailService
}