前言
大家好,今天开始给大家分享 — Dubbo 专题之 Dubbo 泛化引用。在前一个章节中我们介绍了 Dubbo 中的参数验证以及使用场景。我们在这个章节会继续介绍 Dubbo 泛化引用。那么什么是泛化引用呢?泛化引用有什么作用呢?下面就让我详细了解下吧!
1. 泛化引用简介
在前面的章节中我们编写的 Dubbo 服务都是基于 API 接口,例如:com.muke.dubbocourse.common.api.BookFacade
接口。我们在日常开发中的步骤都是首先定义好暴露服务的 API 接口,然后把这个接口打包成 jar 提供给服务调用方。也就是说通常情况下我们的服务调用方都会依赖我们定义的 API 接口编程。那么在 Dubbo 中为我们提供一种不需要依赖 API 接口的方式进行服务调用,这种方式就泛化引用。其表示类为GenericService
。
2. 使用方式
在这里我们主要介绍两种使用方式:
- 通过Spring使用泛化引用
-
配置 XML 文件中的服务引用为
generic="true"
<dubbo:reference id="barService" interface="com.muke.dubbocourse.common.api.BookFacade" generic="true" />
-
在代码中使用泛化调用
GenericService barService = (GenericService) applicationContext.getBean("bookFacade"); Object result = barService.$invoke("queryAll", null, null);
- 通过 Java API方式使用
// 引用远程服务
ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
// 弱类型接口名
reference.setInterface("com.muke.dubbocourse.common.api.BookFacade");
reference.setVersion("0.0.1");
// 声明为泛化接口
reference.setGeneric(true);
// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口引用
GenericService genericService = reference.get();