欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring注解之@Import注解的三种使用方式

程序员文章站 2022-03-25 18:07:20
@[toc] 1、@Import注解须知 1、 @Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中 2、加入IOC容器的方式有很多种,@Import注解就相对很牛皮了, @Import注解可以用于导入第三方包 ,当然@Bean注解也可以,但是@Im ......

@

1、@import注解须知

1、@import只能用在类上 ,@import通过快速导入的方式实现把实例加入spring的ioc容器中

 

2、加入ioc容器的方式有很多种,@import注解就相对很牛皮了,@import注解可以用于导入第三方包 ,当然@bean注解也可以,但是@import注解快速导入的方式更加便捷

 


3、@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 {
//既然是接口肯定要实现这个接口的方法
    @override
    public string[] selectimports(annotationmetadata annotationmetadata) {
        return new string[0];
    }
}

分析实现接口的selectimports方法中的:

  • 1、返回值: 就是我们实际上要导入到容器中的组件全类名【重点
  • 2、参数: annotationmetadata表示当前被@import注解给标注的所有注解信息【不是重点】

需要注意的是selectimports方法可以返回空数组但是不能返回null,否则会报空指针异常!

以上分析完毕之后,具体用法步骤如下:

第一步:创建myclass类并实现importselector接口,这里用于演示就添加一个全类名给其返回值

public class myclass implements importselector {
    @override
    public string[] selectimports(annotationmetadata annotationmetadata) {
        return new string[]{"com.yc.test.testdemo3"};
    }
}

第二步:编写testdemo 类,并标注上使用importselector方式的myclass类

@import({testdemo2.class,myclass.class})
public class testdemo {
        @bean
        public accountdao2 accountdao2(){
            return new accountdao2();
        }

}

可以看出,宜春故意挑了个龙套角色@bean注解,若对@bean注解不是很清晰的童鞋可以参考大白话讲解spring的@bean注解

第三步:编写打印容器中的组件测试类

/**
 * 打印容器中的组件测试
 */
public class annotationtestdemo {
    public static void main(string[] args) {
        annotationconfigapplicationcontext applicationcontext=new annotationconfigapplicationcontext(testdemo.class);  //这里的参数代表要做操作的类

        string[] beandefinitionnames = applicationcontext.getbeandefinitionnames();
        for (string name : beandefinitionnames){
            system.out.println(name);
        }

    }
}

第四步:运行结果
spring注解之@Import注解的三种使用方式

2.3、第三种用法:importbeandefinitionregistrar方式

同样是一个接口,类似于第二种importselector用法,相似度80%,只不过这种用法比较自定义化注册,具体如下:

第一步:创建myclass2类并实现importbeandefinitionregistrar接口

public class myclass2 implements importbeandefinitionregistrar {
//该实现方法默认为空
    @override
    public void registerbeandefinitions(annotationmetadata annotationmetadata, beandefinitionregistry beandefinitionregistry) {
      
    }
}

参数分析:

  • 第一个参数:annotationmetadata 和之前的importselector参数一样都是表示当前被@import注解给标注的所有注解信息
  • 第二个参数表示用于注册定义一个bean

第二步:编写代码,自定义注册bean

public class myclass2 implements importbeandefinitionregistrar {
    @override
    public void registerbeandefinitions(annotationmetadata annotationmetadata, beandefinitionregistry beandefinitionregistry) {
        //指定bean定义信息(包括bean的类型、作用域...)
        rootbeandefinition rootbeandefinition = new rootbeandefinition(testdemo4.class);
        //注册一个bean指定bean名字(id)
        beandefinitionregistry.registerbeandefinition("testdemo4444",rootbeandefinition);
    }
}

第三步:编写testdemo 类,并标注上使用importbeandefinitionregistrar方式的myclass2类

@import({testdemo2.class,myclass.class,myclass2.class})
public class testdemo {

        @bean
        public accountdao2 accountdao222(){
            return new accountdao2();
        }

}

第四步:运行结果
spring注解之@Import注解的三种使用方式

3、@import注解的三种使用方式总结

第一种用法:@import({ 要导入的容器中的组件 } ):容器会自动注册这个组件,id默认是全类名

 

第二种用法:importselector:返回需要导入的组件的全类名数组,springboot底层用的特别多【重点

 

第三种用法:importbeandefinitionregistrar:手动注册bean到容器

以上三种用法方式皆可混合在一个@import中使用,特别注意第一种和第二种都是以全类名的方式注册,而第三中可自定义方式。

@import注解本身在springboot中用的很多,特别是其中的第二种用法importselector方式在springboot中使用的特别多,尤其要掌握!

如果本文对你有一点点帮助,那么请点个赞呗,谢谢~

最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!

欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...

spring注解之@Import注解的三种使用方式