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