Нужна ваша помощь и подсказка. Дело, думаю, в какой-то мелочи, которую я в упор не вижу. Ковыряю потихоньку Spring по лекции Евгения Борисова (https://www.youtube.com/watch?v=BmBr5diz8WA) и столкнулся с такой проблемой (репозиторий с проектом на гитхабе https://github.com/redbeard3/SpringProject/tree/master/src/main) - выполнение кода падает с ошибкой:
апр 20, 2019 6:21:16 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [common_beans.xml]
Exception in thread "main" java.lang.NullPointerException
at redbeard.Runner.main(Runner.java:8)
Process finished with exit code 1
Причем:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("common_beans.xml");
отрабатывает нормально, бин из common_beans.xml с id='terminatorQuoter' настраивается, то есть в поле repeat бина terminatorQuoter выставляется нужное значение:
Ошибка именно в
context.getBean(TerminatorQuoter.class).sayQuote();
потому что:
context.getBean(TerminatorQuoter.class) выдает null
Однако, если я убираю все, что связано с аннотацией InjectRandomInt, то есть ее вообще не использую, и в методе sayQuote() просто вывожу сообщение:
System.out.println(message);
то все работает. Подскажите, где что упустил. Хотя лекцию несколько раз пересмотрел, тщательно выверил все, что сделал.
InjectRandomIntAnnotationBeanPostProcessor в методе postProcessAfterInitialization возвращает null - замените на o. А вообще, насколько помню, Евгений как раз хотел показать почему надо вытаскивать бины по интерфейсу, а не по классу. Потому что из BeanPostProcessor класс может вернуться совсем другой, но реализующий тот же интерфейс.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей