@import注解使用
今天主要從以下幾方面來介紹一下@Import注解
@Import注解是什么
@Import的三種使用方式
1,@Import注解是什么
通過導入的方式實現把實例加入springIOC容器中
2,@Import的三種使用方式
通過查看@Import源碼可以發現@Import注解只能注解在類上,以及唯一的參數value上可以配置3種類型的值Configuration,ImportSelector,ImportBeanDefinitionRegistrar,源碼如下:
@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注解如下:
@Configuration
public class MainConfig
測試打印如下:
String[] beanNames = applicationContext2.getBeanDefinitionNames();
for(int i=0;i<beanNames.length;i++){
? ?System.out.println("bean名稱為==="+beanNames[i]);
}
運行結果:
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注解配置修改如下:
測試結果如下:
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注解配置如下:
運行結果如下:
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注解使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mujava 软件测试实验报告
- 下一篇: 前端JS: 通过代码-看函数作用域thi