2015-09-12 6 views
0

когда я впрыснуть springSecurityService в Grails класс домена пользователя всегда нуль:Grails springSecurityService инъекции в классе домена (NULL)

Я пробовал:

def springSecurityService 
static transients = ['springSecurityService'] 

или

def transient springSecurityService 
static transients = ['springSecurityService'] 

но это то же самое, поэтому я не могу использовать springSecurityService.encodePassword (пароль)

Есть идеи? Почему он не вводится?

Я нашел решение. Я прокомментировал вызов этого() в параметризованном конструкторе.

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

, и это разрушает инъекцию зависимостей.

ответ

2

Это задокументировано here (см. Примечание, начинающееся с «Где практические, сгенерированные классы домена включают параметризованный конструктор»).

Вы можете удалить параметризованные конструкторы, если хотите, но вы не сможете использовать их без вызова this() сгенерированного конструктора по умолчанию без потери зависимости.

IntelliJ неправильно помещает вызов this() как недействительный, и я сообщил об этом как об ошибке в своем трекер-проблеме. Это должно быть исправлено для предстоящей версии версии 15.

+0

Ссылка сломана, перезагрузите ее plz – IgniteCoders

0

Пока ничего не найдено в intellij 15 EAP!

Но она может быть решена путем простого добавления конструктора по умолчанию

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 
} 
... 
} 

Тогда Intellij не выводит эту ошибку больше.

+0

Да, я тоже. Мы ждем выпуска intellij 15. –