Dubbo系列笔记之服务引用过程,不服不行,linux操作系统实用教程第二版

// 调用 ReferenceConfig 的 get 方法获取 bean 实例

return get();

}

比较上面两个方法,我们可以知道 Spring 在实例化 Dubbo 的 ReferenceBean 时会调用 ReferenceConfig 的 #get 方法获取 bean 实例,执行 Dubbo 服务引用的过程。

[](

)三、配置检查处理

============================================================================

继续跟随 ReferenceConfig 的 #get 方法:

public synchronized T get() {

if (destroyed) {

throw new IllegalStateException(“The invoker of ReferenceConfig(” + url + “) has already destroyed!”);

} // 若服务引用代理为空,执行 init 方法

if (ref == null) {

// 处理配置,调用 createProxy 生成代理类

init();

}

return ref;

}

  • ReferenceConfig 的 init( ) 方法

public synchronized void init() {

// 标识是否已经初始化,避免重复初始化

if (initialized) {

return;

} // 获取 DubboBootstrap 引导类实例 if (bootstrap == null) {

bootstrap = DubboBootstrap.getInstance(); bootstrap.init(); } // 检查接口、consumer 等配置是否合法,并对相应的配置赋值 checkAndUpdateSubConfigs(); // 本地存根检查

checkStubAndLocal(interfaceClass); ConfigValidationUtils.checkMock(interfaceClass, this); Map<String, String> map = new HashMap<String, String>();

map.put(SIDE_KEY, CONSUMER_SIDE); // 加入运行时参数,Dubbo 版本号、时间戳、进程号等

ReferenceConfigBase.appendRuntimeParameters(map);

// 是否为泛化接口

if (!ProtocolUtils.isGeneric(generic)) {

String revision = Version.getVersion(interfaceClass, version); if (revision != null && revision.length() > 0) {

map.put(REVISION_KEY, revision); } // 获取接口的方法列表,加入 map

String[] methods = Wrapper.getWrapper(interfaceClass).getMethodNames(); if (methods.length == 0) {

logger.warn("No method found in service interface " + interfaceClass.getName());

map.put(METHODS_KEY, ANY_VALUE); } else {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值