当我将springSecurityService注入(inject)Grails用户域类时,它始终为null:

我试过了:

def springSecurityService
static transients = ['springSecurityService']

要么
def transient springSecurityService
static transients = ['springSecurityService']

但它是一样的,所以我不能使用springSecurityService.encodePassword(password)

有任何想法吗?为什么不注入(inject)?

我找到了决定。我在参数化构造函数中注释了对this()的调用。
User(String name, String email) {
    //this()
    this.name = name
    this.email = email
}

这会破坏依赖注入(inject)。

最佳答案

这已记录为here(请参阅以“在可行的情况下,生成的域类包括参数化构造函数”开头的注释)。

您可以根据需要删除参数化的构造函数,但是,如果不对生成的默认构造函数进行this()调用,就不能使用它们,而不会丢失依赖项注入(inject)。

IntelliJ错误地将对this()的调用标记为无效,并且我在其问题跟踪器中将其报告为错误。该功能将在即将发布的版本15中修复。

10-06 10:06