@import注解使用
今天主要從以下幾方面來(lái)介紹一下@Import注解
@Import注解是什么
@Import的三種使用方式
1,@Import注解是什么
通過(guò)導(dǎo)入的方式實(shí)現(xiàn)把實(shí)例加入springIOC容器中
2,@Import的三種使用方式
通過(guò)查看@Import源碼可以發(fā)現(xiàn)@Import注解只能注解在類(lèi)上,以及唯一的參數(shù)value上可以配置3種類(lèi)型的值Configuration,ImportSelector,ImportBeanDefinitionRegistrar,源碼如下:
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
? ?/**
? ? * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
? ? * or regular component classes to import.
? ? */
? ?Class<?>[] value();
}
接下來(lái)就分別來(lái)看看三種方式具體使用:
a,基于Configuration也就是直接填對(duì)應(yīng)的class數(shù)組
在bean目錄下新增兩個(gè)類(lèi)Square和Circular如下:
* 定義一個(gè)圓形
*
* @author zhangqh
* @date 2018年5月1日
*/
public class Circular {
}
* 定義一個(gè)正方形
*
* @author zhangqh
* @date 2018年5月1日
*/
public class Square {
}
MainConfig注解配置中增加@Import注解如下:
@Configuration
public class MainConfig
測(cè)試打印如下:
String[] beanNames = applicationContext2.getBeanDefinitionNames();
for(int i=0;i<beanNames.length;i++){
? ?System.out.println("bean名稱(chēng)為==="+beanNames[i]);
}
運(yùn)行結(jié)果:
bean名稱(chēng)為===com.zhang.bean.Square
bean名稱(chēng)為===com.zhang.bean.Circular
對(duì)應(yīng)的import的bean都已經(jīng)加入到spring容器中了
b,基于自定義ImportSelector的使用
定義一個(gè)MyImportSelector如下:
* 定義一個(gè)我自己的ImportSelector
*
* @author zhangqh
* @date 2018年5月1日
*/
public class MyImportSelector implements ?ImportSelector{
? ?public String[] selectImports(AnnotationMetadata importingClassMetadata) {
? ? ? ?return new String[]{"com.zhang.bean.Triangle"};
? ?}
}
MainConfig注解配置修改如下:
測(cè)試結(jié)果如下:
bean名稱(chēng)為===com.zhang.bean.Square
bean名稱(chēng)為===com.zhang.bean.Circular
bean名稱(chēng)為===com.zhang.bean.Triangle
三角形 實(shí)例同樣加入到spring容器中了
c,基于ImportBeanDefinitionRegistrar的使用
新建一個(gè)ImportBeanDefinitionRegistrar如下:
* 定義一個(gè)自定的ImportBeanDefinitionRegistrar
*
* @author zhangqh
* @date 2018年5月1日
*/
public class MyImportBeanDefinitionRegistrar ?implements ImportBeanDefinitionRegistrar{
? ?public void registerBeanDefinitions(
? ? ? ? ? ?AnnotationMetadata importingClassMetadata,
? ? ? ? ? ?BeanDefinitionRegistry registry) {
? ? ? ?// new一個(gè)RootBeanDefinition
? ? ? ?RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Rectangle.class);
? ? ? ?// 注冊(cè)一個(gè)名字叫rectangle的bean
? ? ? ?registry.registerBeanDefinition("rectangle", rootBeanDefinition);
? ?}
}
修改MainConfig注解配置如下:
運(yùn)行結(jié)果如下:
bean名稱(chēng)為===com.zhang.bean.Square
bean名稱(chēng)為===com.zhang.bean.Circular
bean名稱(chēng)為===com.zhang.bean.Triangle
bean名稱(chēng)為===rectangle
rectangle打印出來(lái)了說(shuō)明我們通過(guò)ImportBeanDefinitionRegistrar注冊(cè)的實(shí)例也成功加入到了spring容器了
以上是今天文章的所有內(nèi)容,歡迎大家吐槽
轉(zhuǎn)載于:https://blog.51cto.com/14299346/2384932
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的@import注解使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mujava 软件测试实验报告
- 下一篇: 使用Fiddler进行Web接口测试