Для чего используется аннотация @Import в Spring?

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

Ответ

Аннотация @Import в Spring Framework используется для импорта конфигураций из других классов в текущий контекст приложения. Это ключевой инструмент для модульности и композиции конфигураций.

Основное назначение: Объединить несколько конфигурационных классов (@Configuration) или компонентов в один главный контекст.

Пример:

@Configuration
public class DatabaseConfig {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}

@Configuration
public class SecurityConfig {
    // ... бины безопасности
}

@Configuration
@Import({DatabaseConfig.class, SecurityConfig.class}) // Импорт конфигураций
public class AppConfig {
    // Основная конфигурация приложения
}

Теперь при создании контекста на основе AppConfig будут зарегистрированы все бины из DatabaseConfig и SecurityConfig.

Ключевые возможности @Import:

  • Импорт обычных @Configuration классов.
  • Импорт классов, помеченных @Component (например, @Service, @Repository), начиная с Spring 4.2.
  • Импорт классов, реализующих интерфейс ImportSelector или ImportBeanDefinitionRegistrar для продвинутой динамической конфигурации.
  • Часто используется в составе аннотаций Spring Boot (например, @SpringBootApplication неявно использует @Import через @EnableAutoConfiguration).

Альтернатива: Для импорта XML-конфигураций используйте аннотацию @ImportResource.