dubbu 扩展注解_dubbo系列七、dubbo @Activate 注解使用和实现解析

/*** This is equivalent to

 
 

* getActivateExtension(url, key, null);

*

* 在所有的激活中,要使用key 指定的扩展

*@paramurl url

*@paramkey url parameter key which used to get extension point names

*@returnextension list which are activated.

*@see#getActivateExtension(com.alibaba.dubbo.common.URL, String, String)*/

public ListgetActivateExtension(URL url, String key)/*** This is equivalent to

 
 

* getActivateExtension(url, url.getParameter(key).split(","), null);

*

* 在所有的激活中,要指定的group 外加 使用key 指定的扩展

*@paramurl url

*@paramkey url parameter key which used to get extension point names

*@paramgroup group

*@returnextension list which are activated.

*@see#getActivateExtension(com.alibaba.dubbo.common.URL, String[], String)*/

public ListgetActivateExtension(URL url, String key, String group)/*** This is equivalent to

 
 

* getActivateExtension(url, values, null);

*

* 在所有的激活中 values指定的扩展

*@paramurl url

*@paramvalues extension point names

*@returnextension list which are activated

*@see#getActivateExtension(com.alibaba.dubbo.common.URL, String[], String)*/

public ListgetActivateExtension(URL url, String[] values)//最后其实都有下面方法实现

/*** Get activate extensions.

* 加载active扩展

*@paramurl url

*@paramvalues extension point names

*@paramgroup group

*@returnextension list which are activated

*@seecom.alibaba.dubbo.common.extension.Activate*/

public ListgetActivateExtension(URL url, String[] values, String group) {

List exts = new ArrayList();

List names = values == null ? new ArrayList(0) : Arrays.asList(values);if (!names.contains(Constants.REMOVE_VALUE_PREFIX +Constants.DEFAULT_KEY)) {

getExtensionClasses();//cachedActivates里放的map结构 接口实现扩展名:其上的Activate对象

for (Map.Entry entry : cachedActivates.entrySet()) {//遍历所有Activate注解对象

String name = entry.getKey();//spi 扩展名

Activate activate =entry.getValue();if (isMatchGroup(group, activate.group())) {//如果有group匹配

T ext = getExtension(name);//加在扩展类//name不在 values 指定之列,并且没排除name,并且activate的value 在url有对应参数,就算激活

if (!names.contains(name)&& !names.contains(Constants.REMOVE_VALUE_PREFIX +name)&&isActive(activate, url)) {//exts.add(ext);

}

}

}//排序Activate 具体实现在ActivateComparator里,实现了Comparator 接口compare方法

Collections.sort(exts, ActivateComparator.COMPARATOR);

}

List usrs = new ArrayList();for (int i = 0; i < names.size(); i++) {

String name=names.get(i);if (!name.startsWith(Constants.REMOVE_VALUE_PREFIX)&& !names.contains(Constants.REMOVE_VALUE_PREFIX +name)) {//遍历所有没有排除的扩展名

if(Constants.DEFAULT_KEY.equals(name)) {if (usrs.size() > 0) {

exts.addAll(0, usrs);

usrs.clear();

}

}else{//通过扩展名,加载扩展添加到结果集

T ext =getExtension(name);

usrs.add(ext);

}

}

}if (usrs.size() > 0) {

exts.addAll(usrs);

}//返回符合条件的激活扩展

returnexts;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值