@Configuration и @ComponentScan: как не словить баг при миграции на Spring Boot 3+Когда вы выносите конфигурацию в отдельный модуль или создаёте библиотеку с
@Configuration-классами — не забывайте:📌 Spring Boot 3+ по умолчанию НЕ сканирует пакеты вне стартового (
main).Пример:
// Внутри библиотеки
@Configuration
public class MyLibConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
И вы такие:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
🔥 Но
MyService не создаётся! Почему?💡 Потому что
@ComponentScan по умолчанию сканирует ТОЛЬКО package текущего класса и ниже.📌 Решения:
1. Ручной импорт конфигурации:
@SpringBootApplication
@Import(MyLibConfig.class)
public class App { ... }
2. Сделать конфигурацию
@AutoConfiguration и подключить через spring.factories или META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports — актуально для библиотек.3. Переместить
MyLibConfig в подпакет стартового класса (не всегда возможно или удобно).⚠️ Часто баг проявляется неявно: контекст стартует, но бины "теряются", и вы получаете
NoSuchBeanDefinitionException в рантайме.✅ После миграции на Spring Boot 3+ обязательно проверьте, что нужные конфигурации действительно подхватываются. Особенно, если раньше они подключались "магически".
📲 Мы в MAX
👉@BookJava
