Конфигурация с использованием аннотации @SpringBootApplication

У меня проблема с конфигурацией загрузки Spring.

Я создал базовый проект загрузки Spring, используя https://start.spring.io/

И у меня проблема, настройка работает только для классов в подкаталоге:

введите описание изображения здесь

Я пробовал аннотацию @ComponentScan, но это не помогло.

Есть ли у вас идеи, что я могу сделать с этим?

Ответ 1

Spring Документация для загрузки для @SpringBootApplication содержит

Многие Spring У разработчиков загрузки всегда есть свой основной класс, аннотированный с @Configuration, @EnableAutoConfiguration и @ComponentScan. Поскольку эти аннотации так часто используются вместе (особенно если вы следуете рекомендациям выше), Spring Boot обеспечивает удобная альтернатива @SpringBootApplication.

Аннотация @SpringBootApplication эквивалентна использованию @Configuration, @EnableAutoConfiguration и @ComponentScan с их атрибуты по умолчанию: [...]

где @ComponentScan состояния javadoc

Если определенные пакеты не определены, сканирование будет происходить из пакет класса, объявляющий эту аннотацию.

То есть будут проверяться только те типы, которые находятся в том же пакете, что и ваш ReadingListApplication.

Если вам нужна настраиваемая конфигурация, укажите свои собственные @Configuration, @EnableAutoConfiguration и @ComponentScan, если это необходимо.

Ответ 2

При настройке проекта Spring boot используйте свой класс приложения (тот, который содержит аннотацию @SpringBootApplication в базовом пакете.

Одна из тех, что делает @SpringBootApplication, - это сканирование компонентов. Но он сканирует только подпакеты. то есть, если вы поместите этот класс в com.mypackage, он будет сканировать все классы в подпакетах, то есть com.mypackage. *.

Если вы не хотите этого делать, вы также можете добавить @ComponentScan в класс, определяющий корневой пакет i.e @ComponentScan("com.mypackage")

Я бы порекомендовал вам иметь базовый пакет i.e com.mypackage. И в этих пакетах есть свои подпакеты. У вас есть класс, содержащий @SpringBootApplication в этом базовом пакете.

Ответ 3

Проверка документации Spring:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html

С помощью @SpringBootApplication вы можете переопределить значения по умолчанию для сканирования компонентов. Вам просто нужно включить его в качестве параметров:

@SpringBootApplication(scanBasePackages = "entertainment")

или массив строк:

@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})

Ответ 4

У меня была такая же проблема, и для ее решения я переименовал свои пакеты следующим образом.

"com.project"

там вы можете разместить основной класс SpringBootAplication, а затем просто создать остальные пакеты, начинающиеся с "com.project"

"com.project.dao"

"com.project.controller"

Создавая эту структуру субпроектов, вам не нужно использовать scanBasePackages в аннотации @SpringBootApplication, делая это, ваш основной класс сможет найти каждый компонент в вашем проекте.

И если вы решили использовать scanBasePackages, помните, что вам нужно установить все ваши пакеты компонентов, как это.

@SpringBootApplication (scanBasePackages = { "com.project.dao", "Com.project.controller" })