日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

@import注解使用

發布時間:2025/6/17 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @import注解使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天主要從以下幾方面來介紹一下@Import注解

  • @Import注解是什么

  • @Import的三種使用方式


1,@Import注解是什么


通過導入的方式實現把實例加入springIOC容器中


2,@Import的三種使用方式


通過查看@Import源碼可以發現@Import注解只能注解在類上,以及唯一的參數value上可以配置3種類型的值Configuration,ImportSelectorImportBeanDefinitionRegistrar,源碼如下:



@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import {
? ?/**
? ? * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
? ? * or regular component classes to import.
? ? */

? ?Class<?>[] value();
}



接下來就分別來看看三種方式具體使用:


a,基于Configuration也就是直接填對應的class數組


在bean目錄下新增兩個類Square和Circular如下:



/**
* 定義一個圓形
*
* @author zhangqh
* @date 2018年5月1日
*/

public class Circular {
}




/**
* 定義一個正方形
*
* @author zhangqh
* @date 2018年5月1日
*/

public class Square {
}



MainConfig注解配置中增加@Import注解如下:



@Import({Square.class,Circular.class})
@Configuration
public class MainConfig



測試打印如下:



AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);
String[] beanNames = applicationContext2.getBeanDefinitionNames();
for(int i=0;i<beanNames.length;i++){
? ?System.out.println("bean名稱為==="+beanNames[i]);
}



運行結果:



bean名稱為===mainConfig
bean名稱為===com.zhang.bean.Square
bean名稱為===com.zhang.bean.Circular



對應的import的bean都已經加入到spring容器中了


b,基于自定義ImportSelector的使用


定義一個MyImportSelector如下:



/**
* 定義一個我自己的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注解配置修改如下:



@Import({Square.class,Circular.class,MyImportSelector.class})



測試結果如下:



bean名稱為===mainConfig
bean名稱為===com.zhang.bean.Square
bean名稱為===com.zhang.bean.Circular
bean名稱為===com.zhang.bean.Triangle



三角形 實例同樣加入到spring容器中了


c,基于ImportBeanDefinitionRegistrar的使用


新建一個ImportBeanDefinitionRegistrar如下:



/**
* 定義一個自定的ImportBeanDefinitionRegistrar
*
* @author zhangqh
* @date 2018年5月1日
*/

public class MyImportBeanDefinitionRegistrar ?implements ImportBeanDefinitionRegistrar{
? ?public void registerBeanDefinitions(
? ? ? ? ? ?AnnotationMetadata importingClassMetadata,
? ? ? ? ? ?BeanDefinitionRegistry registry)
{
? ? ? ?// new一個RootBeanDefinition
? ? ? ?RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(Rectangle.class);
? ? ? ?// 注冊一個名字叫rectangle的bean
? ? ? ?registry.registerBeanDefinition("rectangle", rootBeanDefinition);
? ?}
}



修改MainConfig注解配置如下:



@Import({Square.class,Circular.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class})



運行結果如下:



bean名稱為===mainConfig
bean名稱為===com.zhang.bean.Square
bean名稱為===com.zhang.bean.Circular
bean名稱為===com.zhang.bean.Triangle
bean名稱為===rectangle



rectangle打印出來了說明我們通過ImportBeanDefinitionRegistrar注冊的實例也成功加入到了spring容器了


以上是今天文章的所有內容,歡迎大家吐槽


轉載于:https://blog.51cto.com/14299346/2384932

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的@import注解使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。