Spring注解Import

一、注解源码

1
2
3
4
5
6
7
8
9
10
11
12
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {

/**
* {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
* or regular component classes to import.
*/
Class<?>[] value();

}

二、注解说明

1、import注解可以导入ImportSelector、ImportBeanDefinitionRegistrar、配置类、普通Component。

1
2
3
4
5
6
// Mybatis
@Import(MapperScannerRegistrar.class)
// Springboot
@Import(EnableAutoConfigurationImportSelector.class)
// springmvc
@Import(EnableWebMvcConfiguration.class)

2、ImportSelector和ImportBeanDefinitionRegistrar区别

1)ImportSelector返回Bean的类名,由ConfigurationClassPostProcessor的ConfigurationClassParser进行解析注册。

2)ImportBeanDefinitionRegistrar无返回值,一般由自身实例化bean,然后注册到BeanFactory。

所以第三方框架要通过接口生成Bean的场景,一般使用ImportBeanDefinitionRegistrar。

评论