将豆子注入grails中的豆子的正确方法是什么

时间:2018-09-19 07:40:21

标签: grails dependency-injection

我在插件“ 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
}

0 个答案:

没有答案