elasticsearch - 服务被注入(inject),但在使用其属性时导致空指针异常。可能的原因是什么?

标签 elasticsearch grails

我在我的 grails 项目的 src 目录中创建了一个 java 服务/文件,并在 resources.groovy 的 bean 中进行了定义。

beans = {
    elasticsearchConfigManager(ElasticsearchConfigManager){}
    accounts(AccountsService){}
}

我可以通过编写“def elasticsearchConfigManager”将其注入(inject)到我的一个拦截器中,并毫无异常(exception)地使用注入(inject)的 java 服务的方法。

另外,我可以将它注入(inject)我的一项 grails 服务中。但在这种情况下,当我尝试使用注入(inject)类的属性时,我得到空指针异常。
@Transactional    
Class AccountService{
     def elasticsearchConfigManager

        def index(params){
            def action=params.get("task")
            return this."${action}"(params)
        }

        def getAccountById(params){
            def indexName=params.get("service")
            def docId=params.get("accountId")
            try{
                GetResponse hit=elasticsearchConfigManager.elasticsearchClient.prepareGet(indexName, "_doc", docId).get()
    ....}

我在这里遇到异常:elasticsearchConfigManager.elasticsearchClient,因为虽然 elasticsearchConfigManager 被注入(inject),但它被认为是 null(我可以通过单击定义的变量 elasticsearchConfigManager 从 Accounts 服务遍历服务,我可以在 Intellij 中看到注入(inject)符号)。

但是,当我以以下方式注入(inject)时,它毫无异常(exception)地起作用。

def elasticsearchConfigManager= Holders.getGrailsApplication().getMainContext().getBean("elasticsearchConfigManager")



可能的原因是什么?我只是想知道。帮助将不胜感激! :)

目录结构:
enter image description here

最佳答案

您的 resources.groovy 中有以下内容:

accounts(AccountsService){}

Grails 服务默认添加到应用程序上下文中,因此通常您不会自己定义该 bean 定义。你的 bean 被称为 accounts .默认情况下,一个名为 accountsService 的 bean将为您的服务创建(假设它在 grails-app/services/... 下定义)。目前尚不清楚您为什么要定义自己的,但如果您真的想这样做,您可能希望将其配置为自动连接......
accounts(AccountsService){ bean ->
    bean.autowire = 'byName'
}
accountsService框架为您创建的 bean 已经按名称配置为 Autowiring 。

关于elasticsearch - 服务被注入(inject),但在使用其属性时导致空指针异常。可能的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781976/

相关文章:

elasticsearch - Logstash安装报错: can't get unique system GID (no more available GIDs)

http - 如何查询elasticsearch获取两个时间戳之间的数据

eclipse - Grails/Eclipse: native 库jline_.dll已在另一个类加载器中加载

internet-explorer - 将响应http状态代码设置为某些错误代码时,无法在ie8中看到响应正文(422)

Elasticsearch 1.5 有时不能过滤作品

elasticsearch - 递归在logstash中的kv过滤器中不起作用

regex - 如何在 NXLog 中使用 RegEx 对多行 XML 进行模式化

grails - gsp页面中的焦点转移

grails - Grails Quartz插件并发不起作用

grails - Grails GSP在Geronimo下不会生成预期的HTML