2016-05-19 14 views
0

Grails 2.4.4プロジェクトに同じ名前のサービスが2つあります。これはRemittanceServiceと呼ばれます。 1つはph.bank(私は数週間前に作成しました)ともう1つはph.gov.advice.slip(これは私が今日作成したものです)のパッケージに入っています。Grailsは、同じ名前のサービスを期待通りに解決しません。

:へ

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

    ... 
} 

ph.gov.advice.slip.RemittanceServiceのための注射剤:本に

class ... { 
    def remittanceService 

    ... 
} 

:今、同じ名前を持つサービスの2つのインスタンスがあるので、私はからph.bank.RemittanceServiceのすべての依存性注入を置き換えます

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

    ... 
} 

ここで問題はそれぞれServiceを指しておらず、代わりにエラーを返します:

java.lang.NullPointerException: Cannot invoke method [...] on null object

私は前のコードに戻すことに決めました。私はに宣言を返すとき:

def remittanceService 

それは常にph.bankで見つけServiceに、決して私のService新しく作成されたを指します。私の現在の修正は:

import ph.gov.advice.slip.RemittanceService 

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

    ... 
} 

しかし、私はそれが間違っていると感じました。これを行うにはもっとGrails-lyな方法がありますか?

+0

Grailsの方法は、あなたの第2のサービスの名前を変更することで噴射することができます。回避策は以下のTarasの答えです – droggo

答えて

2

resources.groovyファイルでBeanを宣言できます。

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

今あなたが設定し、デフォルトの名前でバインディングを超える大会のための理由がある。.. bankRemittanceServiceslipRemittanceService