Spring高级特性之三:@Enable*注解的工作原理
Spring Boot中阐述热插拔技术的时候,简单地提及@Enable*注解。随着多种框架的应用及深入了解,@Enable*这个注解在各种框架中应用相当普及。
那么@Enable*注解工作原理是怎么样的呢?实际通过spring家族的框架分析观察所有的@Enable*注解都有一个@Import注解。@Import注解用于导入配置类,这也就意味着这些自动开启的实现其实是导入一些自动配置的Bean。这些导入配置的方式可以分为三类,故@Enable*可以分为三类。
首先我们查看下@Import注解的功能:
通过上述@Import的功能注解,可以知具体三类为:
一、直接导入配置类(导入@Configuration)
二、依据条件选择配置类(导入与ImportSelector接口相关)
三、动态注册Bean(导入与ImportBeanDefinitionRegistrar接口相关)
Dubbo框架中的@EnableDubboConfig就属于这类型,就以这个注解为例分析:
DubboConfigconfigurationRegistrar实现了ImportBeanDefinitionRegistrar接口,接口的作用就是在运行时自动添加Bean到已有的配置类,通过红框中的方法重写。
其中,AnnotationMetadata参数用来获得当前配置类上的注解,BeanDefinitionRegistry参数为待注册Bean。源码如下:
通过上述列图,使用@EnableDubboConfig会自动加载与dubbo相关的配置类。当配置文件中有prefix为上述图中的关键字时,自动将相关参数通过配置类注入到容器中。
那么具体如何执行的呢?解析配置类时动态获取@Imports属性内容识别待处理的配置类:
具体imports的代码如下:
自定义配置ProviderConfiguration中解析出@Imports中value值,此过程均由ConfigurationClassParser解析类完成。完成后就开始进行beandefinition的注册,其中就涉及到上面两个Registrar的调用,如下:
以上解析,调用是一个循环过程,即Spring单例注册一个核心的思想:层次依赖——由外到里依次解析暴露出所有的beandefinition。具体代码为:
dubbo配置文件就在上述过程中完成保存其内容的数据结构的beandefinition的处理:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?