Spring boot имеет волшебную автоматическую конфигурацию.
Например, если я определяю DataSource @Bean в моем @Configuration, он принимает его, если я этого не делаю, он пытается что-то создать, просматривая файлы свойств и путь к классам.
Если у меня есть H2 в classpath, он создает в памяти db с подключением. Если нет, он может подключиться к mysql или mongo в зависимости от конфигурации
Как мне сделать это в моих собственных bean /code?
Если я определяю bean-компоненты / конфигурацию, мне также может потребоваться определить компонентное сканирование. Это становится проблематичным, если мой сервис зависит от повторно используемых bean-компонентов из других jar-файлов.
Когда компонентное сканирование имеет высокий уровень, то есть org.company посмотрит на ALL @Component и с нетерпением попытается их инициализировать.
Это создает проблему, особенно при тестировании срезов.
Как я могу структурировать свой код с правильным @ComponentScan до
a) определить ленивые bean-компоненты
b) определить bean-компоненты, использующие такие bean-компоненты
c) издеваться над ними, если я не выполняю интеграционное тестирование
d) инициализировать их по-разному в зависимости от профиля по умолчанию и профиля облака
Видите, это практически чёрная магия https://spring.io/blog/2015/04/27/binding-to-data-services-with-spring-boot-in-cloud-foundry