Import
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans
源码注释
Indicates one or more component classes to import — typically @Configuration classes.
标记要导入的一个或者多个组件类,尤其是被 @Configuration 标记的类。
Provides functionality equivalent to the element in Spring XML. Allows for importing @Configuration classes, ImportSelector and ImportBeanDefinitionRegistrar implementations, as well as regular component classes (as of 4.2; analogous to AnnotationConfigApplicationContext.register).
和 Spring XML中的 import 标签相同的功能。允许导入@Configuration 类,ImportSelector 和ImportBeanDefinitionRegistrar 的实现类,以及常规组件类()
AnnotationConfigApplicationContext.register源码
@Override
public void register(Class<?>... componentClasses) {
Assert.notEmpty(componentClasses, "At least one component class must be specified");
StartupStep registerComponentClass = this.getApplicationStartup().start("spring.context.component-classes.register")
.tag("classes", () -> Arrays.toString(componentClasses));
this.reader.register(componentClasses);
registerComponentClass.end();
}
If XML or other non-@Configuration bean definition resources need to be imported, use the @ImportResource annotation instead.
如果XML或者其他非@Configuration bean definition 资源需要导入,使用@ImportResource注解替代。
源码
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
Class<?>[] value();
}
只有一个参数接收Class数组。
常见用法
DataSourceAutoConfiguration
@Import({
DataSourcePoolMetadataProvidersConfiguration.class,
DataSourceInitializationConfiguration.class })
@Import(EmbeddedDataSourceConfiguration.class)
@Import({
DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
问题一:Import数组的顺序性
在DefaultListableBeanFactory类中preInstantiateSingletons方法中的beanNames列表中