Всегда ли Spring находит класс, помеченный аннотацией @Configuration?

«Всегда ли Spring находит класс, помеченный аннотацией @Configuration?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не всегда. Spring обнаруживает классы с @Configuration только при соблюдении условий:

  1. Класс находится в пределах сканируемых пакетов. Область сканирования задаётся @ComponentScan или определяется расположением класса с @SpringBootApplication.
  2. Класс доступен в classpath.

Примеры:

  • Класс будет найден (в зоне сканирования):

    @SpringBootApplication // Сканирует пакет com.example и вложенные
    public class App {}
    
    @Configuration // Находится в com.example.config
    public class MyConfig {}
  • Класс НЕ будет найден автоматически (вне зоны сканирования):

    @Configuration // Находится в com.thirdparty.library
    public class ExternalConfig {}

    Для его регистрации потребуется явно импортировать его с помощью @Import(ExternalConfig.class) или использовать другие механизмы (например, BeanDefinitionRegistryPostProcessor).