2016-05-19 4 views
0

Ich habe zwei Dienste mit demselben Namen in meinem Projekt Grails 2.4.4, RemittanceService genannt. Eines ist im Paket auf ph.bank (das ich vor Wochen erstellt habe) und ein anderes ist auf ph.gov.advice.slip (die ich heute erstellt habe). Da nun zwei Instanzen des Dienstes mit dem gleichen Namen sind, ersetzt ich alle Abhängigkeitsinjektion von ph.bank.RemittanceService aus:Grails löst nicht die gleichnamigen Dienste wie erwartet

class ... { 
    def remittanceService 

    ... 
} 

in dieser:

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

    ... 
} 

und die Injektionen für ph.gov.advice.slip.RemittanceService in:

Jetzt ist das Problem, dass es nicht die entsprechende Service zeigt, und stattdessen einen Fehler zurückgibt:

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

Ich entschied mich, meinen vorherigen Code wiederherzustellen. Wenn ich die Erklärung in zurück:

def remittanceService 

es zeigt immer auf die meinen auf ph.bank, nie gefunden Service neugeschaffenen Service. Mein aktueller Fix ist:

import ph.gov.advice.slip.RemittanceService 

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

    ... 
} 

Obwohl ich fühlte, dass das falsch ist. Gibt es mehr Grails-ly Weg, dies zu tun?

+0

Grails Weise ist Ihre zweite Dienst umbenennen .. gibt es einen Grund für Konvention über Konfiguration und Standard mit Namen verbindlich. Workaround ist in der Antwort unten von Taras – droggo

Antwort

2

Sie können Beans in Ihrer resources.groovy Datei deklarieren.

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

jetzt können Sie injizieren bankRemittanceService und slipRemittanceService

Verwandte Themen