来自服务的 Grails 依赖注入

Grails Dependency Injection from Service

我正在尝试从以下域 class:

注入我自己的服务 elasticsearchService
class DocumentESO extends ElasticsearchObject{

  ElasticsearchService elasticsearchService

  def afterInsert() {
    elasticsearchService.save(this) // <-- Cannot invoke method save() on null object
  }
}

然而,它告诉我它Cannot invoke method save() on null object。这是我的服务:

@Transactional
class ElasticsearchService {
    @Transactional
    def save(ElasticsearchObject esObject) {...}
}

我是不是拼错了什么?如果我会使用 ElasticsearchService elasticsearchService = new ElasticsearchService() 那么它会起作用,但我不再有事务支持了。

在此answer中,罗伯特提到它需要初始化,例如使用元编程save()。这是否意味着在这种情况下我不能使用依赖注入?

因此它将是:

  def afterInsert() {
    ElasticsearchService elasticsearchService = new ElasticsearchService()
    elasticsearchService.save(this) 
  }

??

GORM 实体中的服务注入自 Grails 3.2.8 起默认禁用。

您可以通过添加到 DocumentESO:

在这一特定域 class 中打开自动装配
static mapping = {
       autowire true
   }

但不推荐:https://grails.org/blog/2017-05-09.html