Spring IoC контейнер: Java конфигурация, композиция конфигураций на основе Java, использование аннотации @Import

Функция конфигурации Spring на основе Java позволяет вам составлять аннотации, которые могут снизить сложность вашей конфигурации.

Использование аннотации @Import

Подобно тому, как элемент <import/> используется в файлах Spring XML для упрощения модуляции конфигураций, аннотация @Import позволяет загружать определения @Bean из другого класса конфигурации, как показано в следующем примере:

Java

@Configuration
public class ConfigA {

    @Bean
    public A a() {
        return new A();
    }
}

@Configuration
@Import(ConfigA.class)
public class ConfigB {

    @Bean
    public B b() {
        return new B();
    }
}

Kotlin

@Configuration
class ConfigA {

    @Bean
    fun a() = A()
}

@Configuration
@Import(ConfigA::class)
class ConfigB {

    @Bean
    fun b() = B()
}

Теперь вместо того, чтобы указывать одновременно ConfigA.class и ConfigB.class при создании экземпляра контекста, необходимо явно указать только ConfigB, как показано в следующем примере:

Java

public static void main(String[] args) {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);

    // теперь будут доступны оба компонента A и B...
    A a = ctx.getBean(A.class);
    B b = ctx.getBean(B.class);
}

Kotlin

import org.springframework.beans.factory.getBean

fun main() {
    val ctx = AnnotationConfigApplicationContext(ConfigB::class.java)

    // теперь будут доступны оба компонента A и B...
    val a = ctx.getBean<A>()
    val b = ctx.getBean<B>()
}

Этот подход упрощает создание экземпляров контейнера, так как нужно иметь дело только с одним классом, вместо того, чтобы требовать запоминания потенциально большого количества классов @Configuration во время создания.

Начиная с Spring Framework 4.2, @Import также поддерживает ссылки на классы обычных компонентов, аналогично методу AnnotationConfigApplicationContext.register. Это особенно полезно, если вы хотите избежать сканирования компонентов, используя несколько классов конфигурации в качестве точек входа для явного определения всех ваших компонентов.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки