@ConfigurationЕсть распространённый анти-паттерн: ты используешь
@Configuration и внутри создаёшь бины с @Bean, а в этих методах — инжектишь зависимости через параметры. Всё выглядит красиво и «по фэншую»... но только на первый взгляд.
@Configuration
public class MyConfig {
@Bean
public MyService myService(SomeDep dep) {
return new MyService(dep);
}
@Bean
public SomeDep someDep() {
return new SomeDep();
}
}
⚠️ Проблема: такие методы вызываются при старте контекста, и если
SomeDep создаётся долго (например, подтягивает настройки из удалённого конфига, делает init-запрос в БД, или тянет секьюрити-контекст), это тормозит весь старт.📌 Хуже всего, если ты не подозреваешь об этом: ведь
@Bean -методы не видны как "инициализация", и кажется, что контекст тормозит "где-то ещё".💡 Совет:
- Используй
@Lazy в нужных местах, особенно если bean тяжёлый или редко используется.- Разделяй конфигурацию: отдельно core, отдельно init-heavy.
- Не бойся отказаться от
@Configuration в пользу @Component + @Service, если это упрощает понимание.И главное — профилируй старт.
spring-boot-starter-actuator + --debug могут открыть глаза.📲 Мы в MAX
👉@BookJava

