@Import注解
1、@Import注解須知
-
@Import只能用在類上 ,@Import通過快速導入的方式實現把實例加入spring的IOC容器中
-
加入IOC容器的方式有很多種,@Import注解就相對很牛皮了,@Import注解可以用于導入第三方包 ,當然@Bean注解也可以,但是@Import注解快速導入的方式更加便捷
-
@Import注解有三種用法
2、@Import的三種用法
@Import的三種用法主要包括:
1、直接填class數組方式
2、ImportSelector方式【重點】
3、ImportBeanDefinitionRegistrar方式
2.1、第一種用法:直接填class數組
直接填對應的class數組,class數組可以有0到多個。
語法如下:
@Import({ 類名.class , 類名.class... }) public class TestDemo {}對應的import的bean都將加入到spring容器中,這些在容器中bean名稱是該類的全類名 ,比如com.yc.類名
2.2、第二種用法:ImportSelector方式【重點】
這種方式的前提就是一個類要實現ImportSelector接口,假如我要用這種方法,目標對象是Myclass這個類,分析具體如下:
創建Myclass類并實現ImportSelector接口
public class Myclass implements ImportSelector { //既然是接口肯定要實現這個接口的方法@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return new String[0];} }分析實現接口的selectImports方法中的:
1、返回值: 就是我們實際上要導入到容器中的組件全類名【重點 】
2、參數: AnnotationMetadata表示當前被@Import注解給標注的所有注解信息【不是重點】
需要注意的是selectImports方法可以返回空數組但是不能返回null,否則會報空指針異常!
以上分析完畢之后,具體用法步驟如下:
第一步:創建Myclass類并實現ImportSelector接口,這里用于演示就添加一個全類名給其返回值
public class Myclass implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return new String[]{"com.yc.Test.TestDemo3"};} }第二步:使用ImportSelector方式的Myclass類
@Import({Myclass.class})2.3、第三種用法:ImportBeanDefinitionRegistrar方式
同樣是一個接口,類似于第二種ImportSelector用法,相似度80%,只不過這種用法比較自定義化注冊,具體如下:
第一步:創建Myclass2類并實現ImportBeanDefinitionRegistrar接口
public class Myclass2 implements ImportBeanDefinitionRegistrar { //該實現方法默認為空@Overridepublic void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {} }參數分析:
第一個參數:annotationMetadata 和之前的ImportSelector參數一樣都是表示當前被@Import注解給標注的所有注解信息
第二個參數表示用于注冊定義一個bean
第二步:編寫代碼,自定義注冊bean
public class Myclass2 implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) {//指定bean定義信息(包括bean的類型、作用域...)RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(TestDemo4.class);//注冊一個bean指定bean名字(id)beanDefinitionRegistry.registerBeanDefinition("TestDemo4444",rootBeanDefinition);} }總結
- 上一篇: -webkit-background-c
- 下一篇: 初识instantRun