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. Это особенно полезно, если вы хотите избежать сканирования компонентов, используя несколько классов конфигурации в качестве точек входа для явного определения всех ваших компонентов.
Читайте также:
- Spring IoC контейнер: Java конфигурация, использование аннотации @Configuration, о внутренней работе конфигурации на основе Java
- Spring IoC контейнер: Java конфигурация, использование аннотации @Configuration, внедрение зависимостей между компонентами
- Spring IoC контейнер: Java конфигурация, использование аннотации @Configuration, внедрение метода поиска
Комментарии
Отправить комментарий