excludeFilters в @ComponentScan против исключения в @EnableAutoConfiguration - PullRequest
2 голосов
/ 10 мая 2019

Новинка для весенней загрузки.

При попытке исключить бин из @ComponentScan, к моему удивлению, я обнаружил очень гибкую опцию исключения из @EnableAutoConfiguration.

Насколько я понимаю, @Configuration наследуется от @Component.

Итак,

  1. Почему я должен удалить конфигурацию из @EnableAutoConfiguration, а почему не из @ComponentScan.
  2. У нас есть ASSIGNABLE_TYPE/REGEX/etc.в исключение.Так почему же нам нужно excludeFilters от @ComponentScan.

Существуют ли какие-либо ограничения друг на друга, и это плохой подход, если мы переключаемся между этими исключениями?

Может кто-нибудь уточнитьздесь.

1 Ответ

0 голосов
/ 10 мая 2019

@ComponentScan и @EnableAutoConfiguration используются на разных этапах инициализации контекста приложения Spring.

  1. @ComponentScan - используется для поиска кандидатов в бин, Spring будет искать различные аннотации, такие как @Component, @Configuration и т. Д., И берите кандидатов в бобы.Это функция Spring.
  2. @EnableAutoConfiguration - используется для сканирования кандидатов на автоконфигурацию, Spring будет искать конфигурации, отмеченные для автоконфигурации, и из них загружать кандидаты на bean-компоненты.Это функция весенней загрузки.

Кандидат в автоконфигурирование может быть аннотирован с помощью @ComponentScan для загрузки кандидатов в bean-компоненты, но обычно модули, которые являются модулями автоконфигурации, будут более точными и будут использовать @Import или специальные аннотации.В вашем проекте весенней загрузки у вас должен быть класс, помеченный @SpringBootApplication, который одновременно выполняет @ComponentScan и @EnableAutoConfiguration.Это вызовет обе функции и сделает следующее:

  1. Загрузка всех кандидатов в bean-компоненты из вашего модуля, помеченного @SpringBootApplication
  2. Поиск модулей автоматической конфигурации, загруженных в ваш модуль.classpath
  3. Попробуйте загрузить модули автоконфигурации
  4. Попробуйте загрузить кандидаты в bean-компоненты из ваших модулей автоконфигурации

Когда вы исключаете что-то из @ComponentScan, этоисключается из области действия конкретной аннотации и процесса @ComponentScan, если это ваш модуль или модуль автоконфигурации, который вы создали.

Когда вы исключаете что-то из @EnableAutoConfiguration, вы пытаетесь исключитьавтоконфигурация кандидата.Также обратите внимание, что вы не можете исключить обычную @Configuration, используя эту аннотацию, только кандидаты для автоматической настройки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...