Сервис внедряется, но приводит к исключению нулевого указателя при использовании его свойства.В чем может быть причина? - PullRequest
0 голосов
/ 21 апреля 2019

Я создал java-сервис / файл в каталоге src моего проекта grails, и я определил его в bean-компонентах resources.groovy.

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

Я могу добавить это в один измои перехватчики просто пишут "defasticsearchConfigManager" и используют метод внедренного сервиса java без каких-либо исключений.

Кроме того, я могу внедрить его в один из моих сервисов grails.Но в случае этого, когда я пытаюсь использовать свойство внедренного класса, я получаю исключение Null Pointer.

@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()
    ....}

Здесь я получаю исключение :asticsearchConfigManager.символ в Intellij).

Однако, когда я внедряю следующим образом, он работает без исключения.

defasticsearchConfigManager = Holders.getGrailsApplication (). getMainContext (). getBean("asticsearchConfigManager ")

В чем может быть вероятная причина?Мне просто интересно узнать.Помощь будет оценена!:)

Структура каталогов: enter image description here

1 Ответ

0 голосов
/ 23 апреля 2019

В вашем resources.groovy есть:

accounts(AccountsService){}

Службы Grails добавляются в контекст приложения по умолчанию, поэтому обычно вы не определяете это определение бина самостоятельно. Ваш боб там называется accounts. По умолчанию для вашего сервиса будет создан бин с именем accountsService (при условии, что он определен в grails-app/services/...). Непонятно, почему вы определяете свое собственное, но если вы действительно хотите это сделать, вы, вероятно, захотите настроить его для автоматического подключения ...

accounts(AccountsService){ bean ->
    bean.autowire = 'byName'
}

Компонент accountsService, который создает для вас инфраструктура, уже будет настроен для автоматического подключения по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...