dubbo解析-@EnableDubbo注解详解

2023-11-07

本文基于dubbo 2.7.5版本代码

dubbo必须配置注解@EnableDubbo。

一、@EnableDubbo注解功能

@EnableDubbo整合了三个注解@EnableDubboConfig、@DubboComponentScan、@EnableDubboLifecycle。@EnableDubbo的功能都是由这三个注解完成的。

  1. @EnableDubboConfig引入类DubboConfigConfigurationRegistrar,将用于解析配置相关的类注册到spring容器;
  2. @DubboComponentScan引入类DubboComponentScanRegistrar,用于指定@Service扫描路径;
  3. @EnableDubboLifecycle引入类DubboLifecycleComponentRegistrar,注册了两个监听器到spring容器。

一般我们需要配置@DubboComponentScan,定义@Service的扫描路径。如果不配置@DubboComponentScan,默认使用@EnableDubbo注解的类的包路径。

二、详细介绍注解引入的三个类的作用

上面三个引入类都实现了类ImportBeanDefinitionRegistrar。dubbo实现了方法registerBeanDefinitions。该方法的入参有两个:AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry。其中importingClassMetadata表示的是@EnableDubbo注解的类的元信息,可以通过元信息获取每个注解属性值;registry包含了spring容器中所有的bean定义信息。我们可以通过类似下面的代码获取每个注解属性值:

AnnotationAttributes attributes = AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(DubboComponentScan.class.getName()));
String[] basePackages = attributes.getStringArray("basePackages");
Class[] basePackageClasses = attributes.getClassArray("basePackageClasses");

这些代码给我们提供了借鉴。下面介绍一下三个引入类的作用:

  1. DubboConfigConfigurationRegistrar:将DubboConfigConfiguration.Single和DubboConfigConfiguration.Multiple注册到spring容器。Single和Multiple用于处理spring配置文件中与dubbo配置相关的配置信息。
  2. DubboComponentScanRegistrar:注册了后处理器ServiceAnnotationBeanPostProcessor,该后处理器会扫描@DubboComponentScan设置的包路径,将包路径下所有的@Service注解的类注册到spring容器。
  3. DubboLifecycleComponentRegistrar:注册了两个监听器到spring容器。

这个注解给我们的启示是,我们可以通过注解引入其他类,在引入类中注册监听器和后处理器到spring容器,还可以在引入类中获取注解配置信息,并且根据配置信息设置监听器和后处理器的属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dubbo解析-@EnableDubbo注解详解 的相关文章

  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 使用Spring将war文件WEB-INF目录下的资源导入到applicationContext文件中

    我在我的项目中使用 Spring 框架 我想导入下面的所有 xml 资源 文件 WEB INF CustomerService spring integration Jobs applicationContext配置文件中war文件的目录
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • Java对一维数组倒叙排列

    直接数组元素对换 public class ReversTest public static void main String args int arr 25 4 15 7 8 String strings ramer jelly bean
  • ChatGPT 吹响了第四次产业革命(AI 革命)的号角

    目录 未来 AI 大模型的发展趋势 通用多模态大模型 语言文字是多模态大模型的核心
  • vue.config.js 配置的文件

    vue config js是一个可选的配置文件 用于配置Vue CLI构建的项目 如webpack的配置等 使用vue config js 可以在项目的根目录下创建一个JavaScript文件 并在该文件中进行配置 下面是一些在vue co
  • JAVA-JDK1.8介绍

    Java JDK 1 8 Java Development Kit的第8个主要版本 Java JDK 1 8是Java编程语言的一个重要版本 引入了一些新的功能和改进 同时也修复了几项bug 在本博客中 我将详细介绍Java JDK 1 8
  • ESP8266常见问题汇总——转载自官网

    ESP8266 常见问题 本页面收集esp8266常见问题 概述 本文档主要介绍开发者在ESP8266开发中常见的一些问题 这些问题主要包括以下几大类 基本概念相关 ESP8266 相关 AiCloud 相关 固件编译调试相关 文档资料相关
  • leetcode 376 摆动序列

    动态规划 class Solution public int wiggleMaxLength int nums if nums length 1 return nums length 动态规划 dp i 0 表示当前数字的子序列长度 dp
  • rabbitmq Attempting to connect to: [localhost:5672] SocketExceptio:Socket Closed

    今天使用spring cloud stream for rabbitmq启动项目报错 2019 05 03 13 22 27 350 INFO file 18160 main o s a r c CachingConnectionFacto
  • FAPI专题-8:5G FAPI接口 - 中文规范-4- P7消息格式

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120645757 目录 第3章 主要的
  • 若依管理系统RuoYi-Vue(二):权限系统设计详解

    本篇文章试图讲解若依Vue系统中的权限设计原理以及实战 为什么是 试图 因为这也是摸索着理解的 不一定准 若依Vue系统中的权限管理部分的功能都集中在了系统管理菜单模块中 如下图所示 其中权限部分主要涉及到了用户管理 角色管理 菜单管理 部
  • nginx中root与alias关键字的区别

    前言 近段时间秋招上岸了 于是每天疯狂补各种分布式基础 每天都在痛苦与快乐中度过 在学习 nginx 的时候 遇到配置上的问题 root 与 alias 的区别 卡了大概三个小时 记录下来警醒自己不要再犯了 正文 在使用 进行配置时 两者没
  • CentOS yum的详细使用方法

    yum 是什么yum Yellow dog Updater Modified主要功能是更方便的添加 删除 更新RPM包 它能自动解决包的倚赖性问题 它能便于管理大量系统的更新问题 yum特点可以同时配置多个资源库 Repository 简洁
  • DirectShow播放视频步骤

    DirectShow是MicrosoftWindows平台上的流媒体架构 可以用它来方便的进行视频捕获和回放 DirectShow是基于组件对象模型 COM 下面是DirectShow播放AVI视频的代码 include
  • java项目-谷粒商城(持续更新ing)

    使用docker安装nacos 我是直接在网上找的教程 17条消息 Docker下载安装Nacos并完成持久化配置 docker nacos 下载 虫链Java Library的博客 CSDN博客 在项目中导入依赖 在 common 项目中
  • [0x7FFE1E17E050] ANOMALY: meaningless REX prefix used

    今天要记录一下糟糕的事情 遇到一个很是 cao dan 的问题 再用git时 报错了 0x7FFE1E17E050 ANOMALY meaningless REX prefix used 在cmd窗口输入 也报这个错 idea中也报错 gi
  • 云原生——云平台操作

    作者介绍 奇妙的大歪 个人名言 但行前路 不负韶华 个人简介 云计算网络运维专业人员 前言 云 云是网络 互联网的一种比喻说法 平台 即操作系统 数据库和一些中间件都可称为软件平台 云计算 使用互联网接入存储或者运行在远程服务器端的应用 数
  • 3dsMax2016卡死的一种解决办法

    可能是升级win10版本的时候 win10自带的输入法也升级了 然后3dsMax2016就卡死了 设置一下输入法的兼容性
  • Vue基础知识总结 7:插槽slot与vue导入导出

    作者简介 哪吒 CSDN2021博客之星亚军 新星计划导师 博客专家 哪吒多年工作总结 Java学习路线总结 搬砖工逆袭Java架构师 关注公众号 哪吒编程 回复1024 获取Java学习路线思维导图 大厂面试真题 加入万粉计划交流群 一起
  • 基于matlab实现信号的线性卷积与循环卷积

    系列文章目录 数字信号处理 DSP Digital Signal Process 是电子通信领域非常重要的研究方向 博主汇总了数字信号处理 DSP 中常用的经典案例分析 主要基于算法分析 MATLAB程序实现 信号图像显示 对数字信号处理的
  • python flask框架下登录注册界面_基于Flask框架如何实现用户登录功能

    form hidden tag form username class form control input lg placeholder 用户名 form password class form control input lg plac
  • dubbo解析-@EnableDubbo注解详解

    本文基于dubbo 2 7 5版本代码 文章目录 一 EnableDubbo注解功能 二 详细介绍注解引入的三个类的作用 dubbo必须配置注解 EnableDubbo 一 EnableDubbo注解功能 EnableDubbo整合了三个注