@Import 源码解析

转发请注明出处:

@Import通过快速导入的方式实现把实例加入spring的IOC容器中;一般@EnableXXX注解是通过@Import实现具体的功能(@EnableXXX注解上加个@Import注解),@Import才是@EnableXXX起效果的核心功能。

Import 注解实现过程在 ConfigurationClassParser 中的 processImports 方法:

首先判断@Import注解导入的是配置类有没有实现ImportSelector接口,实现的话就就调用ImportSelector的selectImports方法,这个方法返回的是一批配置类的全限定名,然后继续解析这些配置类。

ImportSelector接口的作用其实就是往spring容器中再次注入一批配置类。

如果没有实现ImportSelector接口,那么再判断有没有实现ImportBeanDefinitionRegistrar,有的话就会调用ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,通过名字也可以判断出,其实就是往spring容器注入一些BeanDefinition。

@Import 注解实现类的bean 注册过程接口

ImportBeanDefinitionRegistrar的作用其实很简单,就是往spring容器注入一些BeanDefinition。

总结@Import的作用:

@Import注解,就是导入一个配置类,但是这个配置类分为不同的情况。如果这个配置类实现了ImportSelector接口,那么就会调用selectImports方法的实现,获取一批配置类的全限定名,然后再解析配置类;如果实现了@Import注解导入的配置类实现类ImportBeanDefinitionRegistrar,那么就会调用registerBeanDefinitions方法的实现,这个方法可以往容器中注入BeanDefinition;最后如果都没实现,那么就按照一个普通的配置类来解析。

所以基于这么一套配置类解析的规则,就可以实现往容器中注入一些bean,通过这些bean来完成某块功能的实现。

可以看看 @EnableDiscoveryClient 和 @EnableFeignClients 两个注解的定义

Original: https://www.cnblogs.com/zjdxr-up/p/16350204.html
Author: 香吧香
Title: @Import 源码解析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589725/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 双亲委派机制

    双亲委派机制 原理 1、一个类加载器接收到类加载请求,它自己并不会先去加载,而是把这个请求委托给父类的加载器去执行 2、如果父类的加载器还有其父类加载器,则进一步向上委托,一次递归…

    Java 2023年6月14日
    077
  • java 日期解决方案

    在很长的一段时间里,Java 的日期时间解决方案一直是一个备受争议的设计,它的问题很多,有的是概念容易让人混淆(比如:Date 和 Calendar 什么情况下该用哪个),有的是接…

    Java 2023年5月29日
    078
  • 数据分析网址

    数据可视化工具 百度ECharts http://echarts.baidu.com/ Cytoscape http://www.cytoscape.org/ 图表秀 http:/…

    Java 2023年6月15日
    067
  • tarojs引入taro-ui时出现找不到 “./style/index.scss“问题解决。

    很经典的问题,每次引入taro-ui都会有同样的问题 将package.json中的taro-ui库删除; 在 devDependencies中添加如下代码: "devD…

    Java 2023年6月6日
    083
  • 机器学习(5)特征值的处理总结和缺失值的处理

    数值型数据处理的方式:1,归一化 2,标准化 3,缺失值处理(pandas处理) 类别型数据:on-hot编码 时间类型数据:时间切分 posted @2018-11-19 16:…

    Java 2023年6月8日
    094
  • IaaS/ PaaS/ SaaS

    PaaS(平台即服务) 如 低代码平台IaaS (基础架构即服务) 如 阿里云主机SaaS (软件即服务) 如 淘宝之于卖家 Original: https://www.cnblo…

    Java 2023年6月15日
    074
  • 2. Java程序的运行机制

    一、完成一个Java程序的流程:编辑Java源代码→编译Java程序→运行Java程序 在记事本中编写Java程序,然后保存为.java类型文件(Java源文件) 使用javac命…

    Java 2023年5月29日
    072
  • 关于将java项目部署到docker容器中并让本机访问

    1.在服务器中安装docker并且拉mysql,java镜像。 2.开启mysql容器(设置Asia/shanhai 时间),登录其中,select now() 查询时间是否与当前…

    Java 2023年6月6日
    084
  • 《码处高效:Java开发手册》之代码风格

    流水淡,碧天长,鸿雁成行。编码风格,简捷清爽,反引无限风光。 在美剧《硅谷》中有这样一个经典镜头,主人公 Richard 与同为开发工程师的女友闹分手,理由是两人对缩进方式有着截然…

    Java 2023年6月5日
    072
  • Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!

    前面讲了Spring Boot 使用 JPA,实现JPA 的增、删、改、查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用。JPA使用非常简单,功能非常强大的ORM框架…

    Java 2023年5月30日
    089
  • 多线程笔记(三)

    1. 同步容器与并发容器 通过synchronized关键字实现线程安全的容器;或通过Collections这个工具类的synchronizedXXX方法创建的容器,都称为同步容器…

    Java 2023年6月8日
    075
  • 54.等我回家

    dsfds posted @2022-09-28 08:30 随遇而安== 阅读(3 ) 评论() 编辑 Original: https://www.cnblogs.com/55z…

    Java 2023年6月7日
    090
  • 关键字,接口,代码块,枚举

    今日内容 1 关键字 2 代码块 3 接口 4 枚举 1 Java中的关键字 static关键字 : 静态的意思 , 可以修饰变量 , 也可以修饰方法 , 被static修饰的成员…

    Java 2023年6月13日
    077
  • springboot分析——与其他组件的整合(druid/mybatis)

    springboot本身提供了许多自动配置,帮助开发者提供开发效率,当然如果我们有一些个性化的需求,springboot 也提供了良好的扩展,只需要配置starter依赖或者简单的…

    Java 2023年5月30日
    066
  • 万字+28张图带你探秘小而美的规则引擎框架LiteFlow

    大家好,今天给大家介绍一款轻量、快速、稳定可编排的组件式规则引擎框架LiteFlow。 一、LiteFlow的介绍 LiteFlow官方网站和代码仓库地址 在每个公司的系统中,总有…

    Java 2023年6月16日
    085
  • Redis的Java客户端

    Redis 的 Java 客户端 Jedis 优点:以 Redis 命令作为方法名称,学习成本低廉,简单且实用 缺点:Jedis 的实例是线程不安全的,在多线程的环境下需要基于线程…

    Java 2023年6月9日
    080
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球