Spring註解之@Import
阿新 • • 發佈:2020-08-24
@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