二、实例分析
三、源码追踪
一、注解用法
@Import注解也是用来给容器注册组件的,使用@Import注解快速给容器中导入一个组件有三种方法
- 导入
@Configuration
注解的配置类使用@Import
(要导入到容器中的组件):容器中就会自动注册这个组件,ID默认为全类名
- 导入
ImportSelector
的实现类:通过实现ImportSelector
类,实现selectImports
方法,返回需要导入组件的全类名数组
- 导入
ImportBeanDefinitionRegistrar
的实现类:通过实现ImportBeanDefinitionRegistrar
类,实现registerBeanDefinitions
方法手动注册Bean到容器中
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
Class<?>[] value();
}
通过注解源码可以看到,@Import注解作用在类上,并且参数可以是class类型的数组,从这里可以看出可以使用@Import注解一次导入多个组件到容器中
二、实例分析
从上面的注解用法来看,使用@Import
注解给容器导入组件有三种方法,并且该注解作用在方法上,一次可以导入多个组件,因此,这里我们直接将三种方法都放在一个@Import
注解来进行导入。如下案例需求:使用方法一注入User
类、使用方法二注入Person
类、使用方法三注入Animal
类。
【1】导入@Configuration
注解的配置类使用@Import
// 启动类,通过打印容器中的Bean来判断是否注入
@Test
public void TestMain(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
String[] beanNames = applicationContext.getBeanDefinitionNames();
for (String beanName :