@ComponentScan
и @EnableAutoConfiguration
используются на разных этапах инициализации контекста приложения Spring.
@ComponentScan
- используется для поиска кандидатов в бин, Spring будет искать различные аннотации, такие как @Component
, @Configuration
и т. Д., И берите кандидатов в бобы.Это функция Spring. @EnableAutoConfiguration
- используется для сканирования кандидатов на автоконфигурацию, Spring будет искать конфигурации, отмеченные для автоконфигурации, и из них загружать кандидаты на bean-компоненты.Это функция весенней загрузки.
Кандидат в автоконфигурирование может быть аннотирован с помощью @ComponentScan
для загрузки кандидатов в bean-компоненты, но обычно модули, которые являются модулями автоконфигурации, будут более точными и будут использовать @Import
или специальные аннотации.В вашем проекте весенней загрузки у вас должен быть класс, помеченный @SpringBootApplication
, который одновременно выполняет @ComponentScan
и @EnableAutoConfiguration
.Это вызовет обе функции и сделает следующее:
- Загрузка всех кандидатов в bean-компоненты из вашего модуля, помеченного
@SpringBootApplication
- Поиск модулей автоматической конфигурации, загруженных в ваш модуль.classpath
- Попробуйте загрузить модули автоконфигурации
- Попробуйте загрузить кандидаты в bean-компоненты из ваших модулей автоконфигурации
Когда вы исключаете что-то из @ComponentScan
, этоисключается из области действия конкретной аннотации и процесса @ComponentScan
, если это ваш модуль или модуль автоконфигурации, который вы создали.
Когда вы исключаете что-то из @EnableAutoConfiguration
, вы пытаетесь исключитьавтоконфигурация кандидата.Также обратите внимание, что вы не можете исключить обычную @Configuration
, используя эту аннотацию, только кандидаты для автоматической настройки.