2015-09-12 4 views
0

quand j'injecte springSecurityService dans Grails classe de domaine de l'utilisateur, il est toujours nulle:Grails injection springSecurityService en classe de domaine (NULL)

J'ai essayé:

def springSecurityService 
static transients = ['springSecurityService'] 

ou

def transient springSecurityService 
static transients = ['springSecurityService'] 

mais la même chose, donc je ne peux pas utiliser springSecurityService.encodePassword (mot de passe)

Des idées? Pourquoi ce n'est pas injecté?

J'ai trouvé une décision. J'ai commenté l'appel à this() dans le constructeur paramétré.

User(String name, String email) { 
    //this() 
    this.name = name 
    this.email = email 
} 

et cela interrompt une Injection de Dépendance.

Répondre

2

Ceci est documenté here (voir la note commençant par "Dans la mesure du possible, les classes de domaine générées incluent un constructeur paramétré.").

Vous pouvez supprimer les constructeurs paramétrés si vous le souhaitez, mais vous ne pouvez pas les utiliser sans l'appel this() au constructeur par défaut généré sans perdre l'injection de dépendance.

IntelliJ signale de manière incorrecte l'appel à this() comme non valide et je l'ai signalé comme un bogue dans leur outil de suivi des problèmes. Il doit être corrigé pour la prochaine version 15.

+0

Lien cassé, recharger plz – IgniteCoders

0

Jusqu'à présent rien n'est résolu dans intellij 15 EAP!

Mais il pourrait être résolu en ajoutant simplement un constructeur par défaut

class User implements Serializable { 

private static final long serialVersionUID = 1 

transient springSecurityService 

String username 
String password 
boolean enabled = true 
boolean accountExpired 
boolean accountLocked 
boolean passwordExpired 

User() { 
} 

User(String username, String password) { 
    this() 
    this.username = username 
    this.password = password 
} 
... 
} 

Alors Intellij n'apporte pas cette erreur plus.

+0

Oui, moi aussi. Nous attendons la libération d'intellij 15. –