Сканирование компонентов не сканирует подпакеты

Я столкнулся со странной проблемой. У меня сложилось впечатление, что компонентное сканирование сканирует подпакеты рекурсивно, если для сканирования указан пакет верхнего уровня.

Мои репозитории и сущности являются главной зависимостью проекта. Они живут под именем пакета 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

Другие вопросы по тегам