Подтвердить что ты не робот

Как работает аннотация EnableAutoConfiguration spring?

Я не поклонник грубой абстракции, И я думаю, что Spring совершил серьезное преступление.

Но я готов упустить это на этот раз, если кто-то сможет объяснить алгоритм, стоящий за конфигурацией "auto".

Взглянув на spring собственные javadocs, он не дает ничего другого, кроме как сказать, что он будет разумно угадывать, что вам нужно и что-то делать с условным beans.

Кто-нибудь знает, какой алгоритм используется для определения того, что нужно загрузить?

4b9b3361

Ответ 1

В моем опыте использования Spring загрузочного пользователя основными факторами для Spring Boot для определения того, какие автоконфигурации будут включены, являются:

1) Классы, присутствующие в пути к классам. Например, если присутствуют классы RabbitMQ и Spring AMQP, тогда будет включен параметр RabbitAutoConfiguration. Соответствующая аннотация @ConditionalOnClass,

2) Наличие или отсутствие пользовательского beans. Например, если все Spring Data JPA присутствует в пути к классам, Spring Boot зарегистрирует LocalContainerEntityManagerFactoryBean bean, только если пользователь еще этого не сделал. Зарегистрированный пользователем beans "переопределяет" значения по умолчанию. Соответствующая аннотация @ConditionalOnMissingBean

Как упоминает @DaveSyer, вы можете, конечно, использовать Spring Boot без @EnableAutoConfiguration, если вы хотите включить соответствующую конфигурацию самостоятельно. Или вы можете использовать менее решительное решение поля exclude @EnableAutoConfiguration. Если, например, вы хотите Spring Boot для автоконфигурации всего, кроме ActiveMQ, вы должны использовать @EnableAutoConfiguration(exclude=ActiveMQAutoConfiguration.class)

По моему мнению, здесь нет абсолютно никакого уголовного преступления! Вы можете использовать то, что хотите от Spring Boot. Когда вы не хотите что-то предлагать, вы можете легко отказаться от частичного или полного!

Также, если вы хотите посмотреть под обложками, вы можете добавить свойство

logging.level.org.springframework.boot=DEBUG

до application.properties и Spring Boot с радостью предоставит подробный отчет о том, что было настроено автоматически и что не было

Ответ 2

В Spring Справочное руководство по загрузке > есть документация. Это не очень сложно, и я вряд ли считаю это уголовным преступлением, чтобы просто добавить кучу @Configuration, которую вы могли бы написать в любом случае (потому что все это делает). Не стесняйтесь использовать @EnableAutoConfiguration, если вы предпочитаете отдельно включать отдельные конфигурации.