Grails无法解析与预期相同的命名服务
在我的Grails2.4.4项目中,我有两个同名的服务,叫做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
汇款服务
。一个在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。方法是重命名您的第二个服务。。约定优于配置和按名称进行默认绑定是有原因的。解决方法如下塔拉斯的答案所示