spring註解@Import用法詳解
阿新 • • 發佈:2020-01-07
【1】@Import
引數value接收一個Class陣列,將你傳入的類以全類名作為id加入IOC容器中
比較簡單,此處不做詳細解釋
【2】ImportSelector
ImportSelector強調的是複用性,使用它需要建立一個類實現ImportSelector介面,實現方法的返回值是字串陣列,也就是需要注入容器中的元件的全類名。id同樣也是全類名。
上程式碼:
//自定義邏輯返回需要匯入的元件 public class MyImportSelector implements ImportSelector { // 返回值就是匯入到容器中的元件全類名 // AnnotationMetadata:當前標註@Import註解的類的所有註解資訊 public String[] selectImports(AnnotationMetadata importingClassMetadata) { return new String[] { "test.spring.ZhangSan","test.spring.LiSi","test.spring.WangWu" }; } }
【3】ImportBeanDefinitionRegistrar
spring官方就是用這種方式,實現了@Component、@Service等註解的動態注入機制。定義一個ImportBeanDefinitionRegistrar的實現類,然後在有@Configuration註解的配置類上使用@Import匯入
具體使用:建立一個ImportBeanDefinitionRegistrar的實現類,實現registerBeanDefinitions方法,對元件進行注入。
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { /** * @param annotationMetadata 當前標註@Import註解的類的所有註解資訊 * @param beanDefinitionRegistry BeanDefinition的註冊類 */ public void registerBeanDefinitions(AnnotationMetadata annotationMetadata,BeanDefinitionRegistry beanDefinitionRegistry) { RootBeanDefinition beanDefinition = new RootBeanDefinition(Cat.class); beanDefinitionRegistry.registerBeanDefinition("cat",beanDefinition); } }
配置類MyConfig:
@Configuration @Import(value = {MyBeanDefinitionRegistrar.class}) public class MyConfig { } /**測試結果 beanName: org.springframework.context.annotation.internalConfigurationAnnotationProcessor beanName: org.springframework.context.annotation.internalAutowiredAnnotationProcessor beanName: org.springframework.context.annotation.internalCommonAnnotationProcessor beanName: org.springframework.context.event.internalEventListenerProcessor beanName: org.springframework.context.event.internalEventListenerFactory beanName: myConfig beanName: cat */
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。