Контекст приложения Spring является нулевым в классе ApplicationContextAware - PullRequest
0 голосов
/ 27 апреля 2020

Я получаю исключение NullPointerException внутри класса ApplicationContextAware, и я не уверен, почему. Почему applicationContext пусто при вызове getBean(SomeClass.class) метода

Ниже приводится мой класс BeanProviderUtil:

@Component
public class BeanProviderUtil implements ApplicationContextAware {
    public static ApplicationContext applicationContext;

    public static <T extends Object> T getBean(Class<T> beanClass) {
        return applicationContext.getBean(beanClass);
    }

    public static Object getBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        BeanProviderUtil.applicationContext = applicationContext;
    }

}

При вызове функции

SomeOtherClass obj = BeanProviderUtil.getBean(SomeOtherClass.class)

Я получаю NPE , При отладке выясняется, что applicationContext неправильно инициализируется Spring.

Примечание

Это потому, что я включил ленивую инициализацию bean-компонента?

Однако я попытался отключить отложенную инициализацию с помощью @Lazy(false), а также с помощью Global application.yml, но это не помогло.

1 Ответ

0 голосов
/ 28 апреля 2020

Итак, я сам понял, что здесь происходит. Я установил глобальную ленивую инициализацию, и это было основным виновником. Поскольку я не был Autowiring BeanProviderUtil, компонент никогда не создавался и, следовательно, applicationContext никогда не инициализировался.

Настройка @Lazy(false) устраняет проблему.

Ранее при отключении @Lazy с помощью @Lazy(false) это не сработало, потому что Spring почему-то не распознал компонент BeanProviderUtil. Добавление @ComponentScan в мой тестовый класс делает свое дело.

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