dubbo 生成 ApplicationConfig 等bean @service@Reference实现原理解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo 生成 ApplicationConfig 等bean @service@Reference实现原理解析相关的知识,希望对你有一定的参考价值。

参考技术A        理论基础:

               生成配置对象有如下几种方式

                 1  @Configuration Bean 方式  比 如

           2 xml方式 就不解释了

       第一种方式,硬编码的方式  2第二种方式  xml配置文件过多导致维护困难效率低下。

springboot引入了一种思想,把属性文件中的对象自动提取属性 转化类型,生成对象注入到spring容器中。是不是又省事,又智能,举个例子 比如:dubbo.application.name=foo等价于<dubbo:application name="foo" />,

那是怎样做到的呢?如果让你做。你应该怎做呢?

 1 即使自动化,我映射到bean的哪个类型呢?总有对应的类型吧。总不能胡乱映射吧。

2我映射到了对应的类型,我值怎转化的?怎转成成对应的类型的?总有这个功能吧。这就是spring提供的 动态生成bean,和数值动态绑定功能。

下面我们看一下具体是如何搞的

步骤说明:

1.参数attributes就是@EnableDubboConfigBinding里面的属性,获取prefix属性值,就是获取到了:dubbo.application

例:

@EnableDubboConfigBinding(prefix = "dubbo.application", type = ApplicationConfig.class)

2.获取dubbo的配置类的class,也就是获取到了ApplicationConfig.class

3.获取multiple的值,默认没有配置就是false

4.调用registerDubboConfigBeans方法生成dubbo的配置bean

@Service @Reference 注解实现的原理,

@Service 目标是定义一个dubbo bean ,需要注册到spring容器中,主要实现bean的动态定义和注入,

实现步骤,

 1扫描定义包路径,包含@Service的所有类,然后生成spring的beandefinition定义,

2  注册到spring容器中,并动态绑定数据。

@Reference 目的是 注入到其他已经生成的bean中,核心原理就在springbean 注入属性前,通过调用自定义属性。查找Referernce 注解标识的相关的字段,并设置属性。

以上是关于dubbo 生成 ApplicationConfig 等bean @service@Reference实现原理解析的主要内容,如果未能解决你的问题,请参考以下文章

dubbo暴露服务与生成代理原理

支持Dubbo接口文档生成的工具!

字节码生成

Dubbo 版 Swagger 来啦!Dubbo-Api-Docs 发布

dubbo源码分析三:consumer注册及生成代理对象

Dubbo-服务消费者初始化