Конфигурация с использованием аннотации @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" })
Ответ 5
ознакомьтесь с рекомендациями по компоновке кода https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-structuring-your-code.html