首页 > 其他分享 >【Spring】@Import注解

【Spring】@Import注解

时间:2023-02-27 19:34:48浏览次数:45  
标签:Spring bean class ImportSelector Import 注解 public

(181条消息) @Import注解_ZmyCoder的博客-CSDN博客_@import

 

1、@Import注解须知

  • @Import只能用在类上 ,@Import通过快速导入的方式实现把实例加入spring的IOC容器中

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

  • @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"};
    }
}

 

第二步:使用ImportSelector方式的Myclass类

@Import({Myclass.class})
  • 1

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);
    }
}

 

 

标签:Spring,bean,class,ImportSelector,Import,注解,public
From: https://www.cnblogs.com/cuipengchong/p/17161576.html

相关文章

  • springboot中redis使用和工具
    application.properties#Redis相关配置spring.data.redis.host=localhost#端口spring.data.redis.port=6379#reids数据库索引spring.data.redis.database=0Red......
  • 基于注解的AOP
    1、引入依赖<!--springaop依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><ver......
  • springboot脱包部署
    <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration>......
  • @Valid 注解类型参数校验
    <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency>@Valid注解......
  • spring aop切面说明
    execution:处理JoinPoint的类型,例如call、execution(*android.app.Activity.on**(..)):这个是最重要的表达式,第一个*表示返回值,*表示返回值为任意类型,后面这个就是典型的......
  • springboot条件注册Condition注解
    环境识别importorg.springframework.context.annotation.Condition;importorg.springframework.context.annotation.ConditionContext;importorg.springframework.c......
  • 基于SpringBoot WebMagic爬虫爬取大乐透双色球
    大乐透网页地址:https://kjh.55128.cn/dlt-history-360.htm双色球网页地址:https://kjh.55128.cn/ssq-history-120.htm 注:程序仅用于个人兴趣爱好,不得用于商业行为,本......
  • 【Python】ImportError: No module named ‘google‘最全解决方法
    跑程序遇到了这个问题,改了好久才解决,由于每个人实际情况不同,现列出各种解决办法:我的环境:pycharmpython3.7首先确定是否装了google这个包,如果依然报错再找问题1这是我成......
  • SpringBoot项目打包部署
    转载自:https://blog.csdn.net/yw_2022/article/details/122649955========= SpringBoot项目打包在linux服务器中运行:jar类型项目会打成jar包:jar类型项目使用SpringBoo......
  • springcloud集成nacos(详细)
    一、什么是nacos官方:一个更易于构建云原生应用的动态服务发现、服务配置、和服务管理平台理解:注册中心(如:服务地址注册进去根据名称调用)、配置中心(如:每个服务yaml中的配置......