如何理解dubbo的ExtensionLoader.getActivateExtension


如何理解dubbo的ExtensionLoader.getActivateExtension,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。dubbo-2.7.3/dubbo-common/src/main/java/org/apache/dubbo/common/extension/ExtensionLoader.java
*forcompatibility,alsocacheclasswitholdalibabaActivateannotation
*/
privatevoidcacheActivateClass(Class>clazz,Stringname){
Activateactivate=clazz.getAnnotation(Activate.class);
if(activate!=null){
cachedActivates.put(name,activate);
}else{
//supportcom.alibaba.dubbo.common.extension.Activate
com.alibaba.dubbo.common.extension.ActivateoldActivate=clazz.getAnnotation(com.alibaba.dubbo.common.extension.Activate.class);
if(oldActivate!=null){
cachedActivates.put(name,oldActivate);
}
}
}

/**
*Findtheextensionwiththegivenname.Ifthespecifiednameisnotfound,then{@linkIllegalStateException}
*willbethrown.
*/
@SuppressWarnings(“unchecked”)
publicTgetExtension(Stringname){
if(StringUtils.isEmpty(name)){
thrownewIllegalArgumentException(“Extensionname==null”);
}
if(“true”.equals(name)){
returngetDefaultExtension();
}
finalHolderholder=getOrCreateHolder(name);
Objectinstance=holder.get();
if(instance==null){
synchronized(holder){
instance=holder.get();
if(instance==null){
instance=createExtension(name);
holder.set(instance);
}
}
}
return(T)instance;
}

//……
}

getActivateExtension方法先执行getExtensionClasses加载extension类,这里主要通过loadDirectory方法加载META-INF/dubbo/、META-INF/dubbo/internal/、META 香港云主机-INF/services/三个目录下的extensionloadDirectory方法会调用loadResource方法,loadResource方法会调用loadClass方法,loadClass方法会通过cacheActivateClass把Activate注解信息放入到cachedActivates中之后遍历cachedActivates通过getExtension方法把extension实例放入exts,然后再根据ActivateComparator.COMPARATOR进行排序,最后加载usr的extension(目前看代码names貌似一直为空),然后合并返回dubbo-common-2.7.3-sources.jar!/org/apache/dubbo/common/extension/support/ActivateComparator.javaActivateComparator首先通过parseActivate解析注解信息到ActivateInfo,然后对于有配置before或after的则根据其值进行升序排序,否则则通过order(没有指定默认为0)来排序,大于返回1,否则返回-1getActivateExtension方法先执行getExtensionClasses加载extension类,这里主要通过loadDirectory方法加载META-INF/dubbo/、META-INF/dubbo/internal/、META-INF/services/三个目录下的extensionloadDirectory方法会调用loadResource方法,loadResource方法会调用loadClass方法,loadClass方法会通过cacheActivateClass把Activate注解信息放入到cachedActivates中之后遍历cachedActivates通过getExtension方法把extension实例放入exts,然后再根据ActivateComparator.COMPARATOR进行排序,最后加载usr的extension(目前看代码names貌似一直为空),然后合并返回关于如何理解dubbo的ExtensionLoader.getActivateExtension问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注开发云行业资讯频道了解更多相关知识。

相关推荐: win10自动更新怎么关闭

这篇“win10自动更新怎么关闭”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win10自动更新怎么关闭”文章吧。方法如下:1.进入win10操…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/13 11:30
Next 08/13 11:31

相关推荐