|
|
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
Доброго утра, коллеги! Понимаю, что вопрос простой, но туплю безбожно :( Приложение состоит из модулей, один из которых - реализация операций с РСУБД. Он сделан, как говорится, по учебнику: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Все работает отлично. Задача состоит в том, чтобы заинжектить этот репозиторий в другой модуль. Пишу в его конфиге: Код: xml 1. 2. 3. 4. и далее Код: java 1. 2. 3. 4. 5. 6. После вызова domainDao.findPersonsById(...) получаю NPE. В каком месте я дурак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 09:41 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplabdomainDao.findPersonsById(...)а зачем это писать руками, да еще именоваными запросами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 10:29 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
Petro123, Модуль работы с РСУБД существующий. Написан достаточно давно и используется в нескольких проектах. Его надо проинжектить в новый проект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 10:37 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, А почем через @Resource, а не @Autowired @Qualifier("domainDao")? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 10:51 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, Спасибо. Работает. Но приходится явно загружать контекст: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Более того, при таком подходе аннотации вообще можно убрать и будет работать. А вот этого делать и не хочется. Хочется, чтобы связывание выполнялось без принудительной загрузки контекста. Это возможно как-нибудь сделать? Вот содержимое worker-context.xml: Код: xml 1. 2. 3. 4. 5. где импортируется конфигурация модуля подключения к БД и в котором определен класс DomainDaoImpl который и надо проинжектить. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 12:38 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, Так правильно у вас класс Extractor похоже вне spring-контекста. Добавьте создание extractor'а в worker-context.xml Будет автоматически инжектится. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 14:20 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, Нет, определенно не мой день :( Спасибо за совет, но вот как это сделать... Вот контекст: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. и получаю, что нужный мне domainDao все равно null. Класс Extractor аннотировал всем чем можно - не инжектится. Конструктор класса аннотировал - не инжектится. Подскажите, пожалуйста, еще раз - куда глянуть. Спасибо и извините за беспокойство! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2018, 15:58 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, Если не трудно покажите где вы используете Extractor. По идее там где он используется его тоже надо инжектить. Тогда он будет создаваться в рамках контекста и заинжектит все что надо. Т.к. во время подымания контектса он вам не ругается, что "DomainDao domainDao" не заижектен, то это значит, что вы сами создаете объект типа Extractor. Что делать не рекомендуется. Грубо говоря все объекты-бины не надо создавать ручками (через new). Т.к. spring-context об этих объектах ничего не знает и их не видит. P.S. ИМХО вам бы почитать что такое spring-context, жизненный цикл бинов, и как со всем этим работать. Прошу прощения у меня складывается впечатление, что вы делаете не совсем понимая, что делаете. Из-за этого у вас вылазят странности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 05:32 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, В общем-то да - глЫбины понимания нет. Но надо переработать старый проект, а автора уже не найти :) Значит так. Сначала реализация DAO: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. DomainDao - как обычно - интерфейс с описаниями: Код: java 1. 2. 3. 4. 5. 6. Сущность: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Контекст - стандартный XML (rdbs-context.xml) с описанием DataSource, EntityManagerFactory, TransactionManager и свойствами подключения к БД (хост, порт, драйвер и проч). Здесь все работает - проверено железно и не раз. Итак, мне надо инжектировать domainDao в класс: Код: java 1. 2. 3. 4. 5. 6. 7. и "дернуть" из него методы findPersonsXXX. Контекст: Код: xml 1. 2. 3. 4. 5. 6. 7. Но при таком раскладе domainDao не инжектится - получаю null. Кажется, ничего не забыл :) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 08:02 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, Как и где класс Extractor вызываете? Можно код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 09:55 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, А ведь, кажется, что-то сделал :) Инжектится. Вы заставили подумать и почитать - СПАСИБО!!! Вот код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Насколько правильно ТАК писать? И сразу вопрос: можно ли прочесть контекст без GenericXMLApplicationContext и ему подобных? Еще раз - спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 10:52 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, Не правильно же :-) Сканер то же нужно загнать в bean, например через @Context А потом придется узнавать где используется класс Scanner, и так далее до функции "main" :-) Зачем вы самостоятельно что-то извлекаете из spring-контекста? ИМХО тогда вообще избавиться от Spring'а и все инжектить через передачу параметров в конструктор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 11:23 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
mad_nazgul, Что такое @Context? Аннотация? Нигде в документации такого не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 11:35 |
|
||
|
Заинжектить репозиторий в другой модуль
|
|||
|---|---|---|---|
|
#18+
fplab, Прошу прощения ошибся, конечно же @Component :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2018, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39611325&tid=2122204]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
145ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 259ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...