бин с автопроводкой, выдающий исключение нулевого указателя при использовании для инициализации глобальной переменной - PullRequest
0 голосов
/ 29 июня 2018

У меня есть проблема, которая на первый взгляд кажется очень простой, но я не могу найти решение для нее. У меня есть класс Service с именем SystemTasksService, который имеет два метода, вызывающих проблему, вот код:

@Service
@PropertySource("classpath:application.properties")
public final class SystemTasksService {

    Map<String, String> getSeedRecordUnderReview(){
        return new HashMap<>();
    }

    Map<String, String> getProduceTutorialUnderReview(){
        return new HashMap<>();
    }

}

А затем эти методы называются в другом классе, например:

private Map<String, String> seedRecordUnderReview = systemTasksService.getSeedRecordUnderReview();

private Map<String, String> produceTutorialUnderReview = systemTasksService.getProduceTutorialUnderReview();

systemTaskService внедряется с использованием аннотации @Autowired (это приложение с весенней загрузкой), и проблема не в этом, потому что я могу просто вызывать другие методы в этом сервисе (только не для инициализации глобальной переменной на той же самой) строка объявлена.

Кто-нибудь знает, что вызывает это?

С уважением,

1 Ответ

0 голосов
/ 29 июня 2018

Хорошо, похоже, что во время создания объекта часть с автопроводкой появляется после инициализации глобальных переменных, поэтому, когда я вызываю autowired systemListenerService, перед этим она выдает исключение nullpointer. Я решаю эту проблему с помощью аннотации @PostConstruct следующим образом:

@PostConstruct
private void init(){
    seedRecordsUnderReview = systemTasksService.getSeedRecordsUnderReview();
    produceTutorialsUnderReview = systemTasksService.getProduceTutorialsUnderReview();
}

После создания объекта этот компонент SystemTaskService был автоматически подключен, и, следовательно, вызов методов в экземпляре systemTasksService больше не дает исключение нулевого указателя, поскольку переменная теперь ссылается на объект с автоматическим подключением.

...