Сканирование компонентов не сканирует подпакеты
Я столкнулся со странной проблемой. У меня сложилось впечатление, что компонентное сканирование сканирует подпакеты рекурсивно, если для сканирования указан пакет верхнего уровня.
Мои репозитории и сущности являются главной зависимостью проекта. Они живут под именем пакета com.foo.bar.xyz, а мой конфиг приложения находится под пакетом com.foo.bar. Когда я пишу @ComponentScan(basePackages = "com.foo.bar")
, вместе с @EnableJpaRepositories
выдает ошибку, что компонент репозитория не найден.
Однако, когда я указываю пакет репозитория верхнего уровня, такой как @EnableJpaRepositories(basePackages = com.foo.bar.xyz)
наряду со сканированием компонентов, как описано выше, он обнаруживает хранилище просто отлично.
Теперь это происходит только потому, что репозитории и сущности внедряются как зависимость maven? Так что рекурсивная часть сканирования компонентов, сканирует ли подпакеты или подкаталоги?
1 ответ
Теперь это происходит только потому, что репозитории и сущности внедряются как зависимость maven?
- Нет
Так что рекурсивная часть сканирования компонентов, сканирует ли подпакеты или подкаталоги?
- Да, компонентный поиск выполняет рекурсивный поиск в подпакетах.
Чтобы уточнить здесь @ComponentScan
предназначен для поиска всех классов, имеющих @Component
или его подтипы, такие как @Controller
тогда как для включения Spring Data JPA, аннотируя класс PersistenceContext с помощью @EnableJpaRepositories
аннотации и для настройки базовых пакетов, которые сканируются, когда Spring Data JPA создает реализации для интерфейсов репозитория. Отсюда необходимость декларировать информацию о базовом пакете для обоих @ComponentScan
а также @EnableJpaRepositories