Grails无法解析与预期相同的命名服务

Grails无法解析与预期相同的命名服务,grails,dependency-injection,Grails,Dependency Injection,在我的Grails2.4.4项目中,我有两个同名的服务,叫做汇款服务。一个在ph.bank(我几周前创建的)上的软件包中,另一个在ph.gov.advice.slip(我今天创建的)上。因为现在有两个同名的服务实例,所以我将ph.bank.汇款服务的所有依赖项注入替换为: class ... { def remittanceService ... } 为此: class ... { def bankRemittanceService // added the

在我的Grails2.4.4项目中,我有两个同名的服务,叫做
汇款服务
。一个在
ph.bank
(我几周前创建的)上的软件包中,另一个在
ph.gov.advice.slip
(我今天创建的)上。因为现在有两个同名的服务实例,所以我将
ph.bank.汇款服务的所有依赖项注入替换为:

class ... {
    def remittanceService

    ...
}
为此:

class ... {
    def bankRemittanceService
    // added the word `bank` from its package

    ...
}
以及
ph.gov.advice.slip.汇款服务的注射进入:

class ... {
    def slipRemittanceService
    // added the word `slip` from its package

    ...
}
现在的问题是它没有指向相应的
服务
,而是返回一个错误:

java.lang.NullPointerException: 无法对空对象调用方法[…]

我决定把它还原为我以前的代码。当我将声明返回到:

def remittanceService
它总是指向
ph.bank
上的
服务
,而不是我新创建的
服务
。我目前的解决方案是:

import ph.gov.advice.slip.RemittanceService

class ... {
    def slipRemittanceService = new RemittanceService()
    // Here I initialize it instead on how dependencies should be declared

    ...
}

虽然,我觉得这是错误的。有没有更适合Grails的方法呢?

您可以在
参考资料.groovy文件中声明bean

beans = {
  bankRemittanceService(ph.bank.RemittanceService) {
  }
  slipRemittanceService(ph.gov.advice.slip.RemittanceService) {
  }
}

现在,您可以注入
BankCreditanceService
slipRemittanceService
您可以在
resources.groovy
文件中声明bean

beans = {
  bankRemittanceService(ph.bank.RemittanceService) {
  }
  slipRemittanceService(ph.gov.advice.slip.RemittanceService) {
  }
}

现在,您可以注入
BankCreditanceService
slipRemittanceService

Grails的方法是重命名您的第二个服务。。约定优于配置和按名称进行默认绑定是有原因的。解决方法如下所示,答案来自TarasGrails。方法是重命名您的第二个服务。。约定优于配置和按名称进行默认绑定是有原因的。解决方法如下塔拉斯的答案所示