У меня есть сервис в плагине 'A', называемый EmailImplService, который реализует интерфейс под названием EmailService.EmailImplService использует сервис, который является интерфейсом (SubService).В реализации плагина (класс, который расширяет grails.plugins.Plugin) у меня есть следующая настройка:
Closure doWithSpring() {
{ ->
emailService(EmailImplService) {
subService = ref('subImplAService')
}
}
}
В плагине 'B' у меня есть служба (UsingEmailService), которая использует EmailService, но должнаиспользовать другую реализацию интерфейса SubService (SubImplBService).Поэтому я попытался сделать следующее в resources.groovy основного приложения:
myEmailService(EmailImplService) { bean ->
subService = ref('subImplBService')
}
Приложение запускается нормально, но subService является экземпляром SubImplAService, а не SubImplBService.Так что, видимо, мой подход не работает.Я помню, весной можно использовать инжектор конструктора, который я хотел бы использовать здесь, так как это сделало бы немного более очевидным, что здесь происходит.Это возможно с граалями или чего мне не хватает в моем подходе?
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
}