Как заинжектить репозиторий в другом классе?

Сдаюсь, не знаю какой запрос сформулировать в поисковике.
Суть в следующем, играюсь с написание бота для телеграмма, но возникла одна проблема при отладке, так как постоянно загружать на сервак и тестить написанный код хуками долго.
Вызываю методы по одиночке и проверяю работоспособность, но обратил внимание что не инжектится репозиторий, точнее при отладке его значение равно Null
5ea6bc9eec447422636789.png

хотя вызов метода в исходном классе инжектится без проблем:
5ea6bd2a3b840302223421.png

Кто может подсказать какие особенности взаимодействия с этим инструментом я не понимаю?
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
TelegramController ts = new TelegramController();

но обратил внимание что не инжектится репозиторий, точнее при отладке его значение равно Null

Конечно не инжектятся, вы же их в конструктор объекта, который руками создаете, не добавляете!
Autowiring -- инструмент DI-контейнера, то есть если контроллер создается из контейнера, то он получит все зависимости. В Spring все вращается вокруг контейнера зависимостей, вы в таком случае создаете сервис, указываете зависимости, а уже контейнер собирает ваш сервис.

Но в данном случае вы контроллер руками создали, значит все зависимсоти будьте добры ручкам и обеспечьте объекту. НО! Использовать контроллеры как сервисы изнутри других контроллеров (и любых других слоев приложения, а не фреймворка) не верно и очень путает, за все время видел тольк один такой случай для горячей подмены на время переезда.

Если хотите переиспользовать логику:
Логика должна быть не в другом контроллере, а в некотором сервисе (объекте), который бы вы вызывали из двух (и более) контроллеров. Тогда все бы легко и ПОНЯТНО работало бы и инжектилось.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы