@Import注解是用于给Spring容器导入组件,其主要的使用方式有下列三种
一、@Import
1、@Import注解的详细信息如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
// @Import注解的取值是一个Class类型的数组,可以同时填写多个类的字节码文件
Class<?>[] value();
}
2、@Import注解的使用位置
public enum ElementType {
// 使用在类上、接口上(包括注解类型)、或者是枚举声明上
/** Class, interface (including annotation type), or enum declaration */
TYPE,
3、@Import注解语法格式
@Import({类1.class,类2.class,类3.class......})
4、测试@Import注解
一、准备几个测试类,PineApple,Plum、WaterMelon
二、Spring的配置类
@Configuration
// 使用@Import将下面三个组件导入到Spring中,交由Spring容器进行管理
@Import({PineApple.class,Plum.class,WaterMelon.class})
public class SpringConfiguration {
}
三、测试类
public class SpringDemo {
@Test
public void springTest01() {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
// 获取并输出所有Bean的名称
String[] beanDefinitionNames2 = context.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames2) {
System.out.println(beanDefinitionName);
}
}
}
四、测试结果
// Spring容器自身组件
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
// Spring配置类
springConfiguration
// 自定义组件
com.spring01.bean.PineApple
com.spring01.bean.Plum
com.spring01.bean.WaterMelon
二、实现ImportSelector接口&&@Import注解
1、自定义类(MyImportSelector)实现ImportSelector接口
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
// 定义一个字符串数组,里面定义你要注入到Spring容器中的类,(包类路径)
String[] strArr = {"com.spring01.bean.WaterMelon","com.spring01.bean.PineApple"};
return strArr;
}
}
2、配置类
@Configuration
// 导入自定义类MyImportSelector
@Import(MyImportSelector.class)
public class SpringConfiguration {
}
3、测试类
public class SpringDemo {
@Test
public void springTest01() {
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class);
// 获取并输出所有Bean的名称
String[] beanDefinitionNames2 = context.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames2) {
System.out.println(beanDefinitionName);
}
}
}
4、测试结果
// Spring容器自身组件
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
// Spring配置类
springConfiguration
// 自定义要导入的组件
com.spring01.bean.WaterMelon
com.spring01.bean.PineApple
三、实现ImportBeanDefinitonRegistrar接口&&@Import注解
1、自定义类MyImportBeanDefinitionRegistrar实现ImportBeanDefinitionRegistrar接口,并且手动实现registerBeanDefinitions方法
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
// 指定Bean的信息 RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Plum.class);
// 注册bean时指定bean对应的id registry.registerBeanDefinition("plum",rootBeanDefinition); } }
2、配置类
@Configuration
@Import({MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})
public class SpringConfiguration {
}
3、测试类
@Test public void springTest01() { ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfiguration.class); // 获取并输出所有Bean的名称 String[] beanDefinitionNames2 = context.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames2) {
System.out.println(beanDefinitionName); } }
4、测试结果
// Spring容器自身组件
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
// Spring配置类
springConfiguration
// 使用实现ImportSelector接口和@Import注解实现注入组件
com.spring01.bean.PineApple
com.spring01.bean.WaterMelon
// 使用实现ImportBeanDefinitionRegistrar接口和@Import注解实现注入组件
plum