Как правильно вводить бобы в бобы в Граале? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть сервис в плагине '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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...