当前位置: 首页 > news >正文

重庆高端网站建设价格站长工具关键词

重庆高端网站建设价格,站长工具关键词,做网站需要好多钱,建设公司属于什么企业一、用法 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机。 Activate(group Constants.PROVIDER) public class DrpcServerInterceptor implements Filter{private fina…

一、用法

Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,dubbo用它在spi扩展类定义上,表示这个扩展实现激活条件和时机。

@Activate(group = Constants.PROVIDER)
public class DrpcServerInterceptor implements Filter{private final ServerRequestInterceptor serverRequestInterceptor;private final ServerResponseInterceptor serverResponseInterceptor;public DrpcServerInterceptor() { String sendUrl = ZipkinConfig.getProperty(ZipkinConstants.SEND_ADDRESS);Sender sender = OkHttpSender.create(sendUrl);Reporter<zipkin.Span> reporter = AsyncReporter.builder(sender).build();String application = ZipkinConfig.getProperty(ZipkinConstants.BRAVE_NAME);//RpcContext.getContext().getUrl().getParameter("application");Brave brave = new Brave.Builder(application).reporter(reporter).build();this.serverRequestInterceptor = brave.serverRequestInterceptor();this.serverResponseInterceptor = brave.serverResponseInterceptor();}
。。。。
}

表示该类只在生产者生效。

二、源码解析

先看下接口定义:

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Activate {/*** Group过滤条件。* <br />* 包含{@link ExtensionLoader#getActivateExtension}的group参数给的值,则返回扩展。* <br />* 如没有Group设置,则不过滤。*/String[] group() default {};/*** Key过滤条件。包含{@link ExtensionLoader#getActivateExtension}的URL的参数Key中有,则返回扩展。* <p/>* 示例:<br/>* 注解的值 <code>@Activate("cache,validatioin")</code>,* 则{@link ExtensionLoader#getActivateExtension}的URL的参数有<code>cache</code>Key,或是<code>validatioin</code>则返回扩展。* <br/>* 如没有设置,则不过滤。*/String[] value() default {};/*** 排序信息,可以不提供。*/String[] before() default {};/*** 排序信息,可以不提供。*/String[] after() default {};/*** 排序信息,可以不提供。*/int order() default 0;
}

它有两个设置过滤条件的字段,group,value 都是字符数组。用来指定这个扩展类在什么条件下激活。

下面以com.alibaba.dubbo.rpc.filter接口的几个扩展来说明。

//如MonitorFilter
@Activate(group = {Constants.PROVIDER, Constants.CONSUMER})
public class MonitorFilter implements Filter {}

表示如果过滤器使用方(通过group指定)属于Constants.PROVIDER(服务提供方)或者Constants.CONSUMER(服务消费方)就激活使用这个过滤器。

//再看这个扩展
@Activate(group = Constants.PROVIDER, value = Constants.TOKEN_KEY)
public class TokenFilter implements Filter {
}

表示如果过滤器使用方(通过group指定)属于Constants.PROVIDER(服务提供方)并且 URL中有参数 Constants.TOKEN_KEY(token)时就激活使用这个过滤器。

再看下具体实现:

dubbo在ExtensionLoader类,解析某个接口扩展实现类时,会把所有实现类中有Activate注解的,都先放到一个全局map中。

Activate activate = clazz.getAnnotation(Activate.class);
if (activate != null) {//如果有,加入,cachedActivates map 扩展名:实现类class,形式cachedActivates.put(names[0], activate);
}

然后提供了4个方法来具体使用cachedActivates,返回要激活使用的扩展。

 /*** This is equivalent to <pre>*     getActivateExtension(url, key, null);* </pre>* 在所有的激活中,要使用key 指定的扩展* @param url url* @param key url parameter key which used to get extension point names* @return extension list which are activated.* @see #getActivateExtension(com.alibaba.dubbo.common.URL, String, String)*/public List<T> getActivateExtension(URL url, String key)/*** This is equivalent to <pre>*     getActivateExtension(url, url.getParameter(key).split(","), null);* </pre>* 在所有的激活中,要指定的group 外加 使用key 指定的扩展* @param url   url* @param key   url parameter key which used to get extension point names* @param group group* @return extension list which are activated.* @see #getActivateExtension(com.alibaba.dubbo.common.URL, String[], String)*/public List<T> getActivateExtension(URL url, String key, String group)/*** This is equivalent to <pre>*     getActivateExtension(url, values, null);* </pre>* 在所有的激活中 values指定的扩展* @param url    url* @param values extension point names* @return extension list which are activated* @see #getActivateExtension(com.alibaba.dubbo.common.URL, String[], String)*/public List<T> getActivateExtension(URL url, String[] values)//最后其实都有下面方法实现/*** Get activate extensions.* 加载active扩展* @param url    url* @param values extension point names* @param group  group* @return extension list which are activated* @see com.alibaba.dubbo.common.extension.Activate*/public List<T> getActivateExtension(URL url, String[] values, String group) {List<T> exts = new ArrayList<T>();List<String> names = values == null ? new ArrayList<String>(0) : Arrays.asList(values);if (!names.contains(Constants.REMOVE_VALUE_PREFIX + Constants.DEFAULT_KEY)) {getExtensionClasses();//cachedActivates里放的map结构 接口实现扩展名:其上的Activate对象for (Map.Entry<String, Activate> 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<T> usrs = new ArrayList<T>();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);}//返回符合条件的激活扩展return exts;}

 

转载于:https://www.cnblogs.com/wangzhuxing/p/9826555.html

http://www.lbrq.cn/news/2406655.html

相关文章:

  • 山东省建设厅官方网站百度站长提交
  • vs2012解决方案做网站直播:英格兰vs法国
  • 石家庄微网站建设公司哪家好常用的关键词挖掘工具有哪些
  • 做的好的企业网站百度指数的使用方法
  • 什么网站做产品销售做的好福州短视频seo服务
  • 北京公司网站建设费用长沙seo优化报价
  • 网站建设宣传单页电脑优化软件推荐
  • 如何把学校网站建设好做一个企业网站需要多少钱
  • 专做美容师招聘网站搜索引擎下载安装
  • 郑州富士康公司简介seo优化有哪些
  • 温江网站制作站长工具站长
  • 长春作网站建设的公司运营推广渠道有哪些
  • 台州网站建设网站推广表白网页制作免费网站制作
  • 外贸单在哪些网站做上海网站关键词排名优化报价
  • 泰州专业网站建设制作广告投放是做什么的
  • 业务型网站做seo长沙网站优化推广方案
  • 北京做网站建设的公司哪家好竞价推广账户托管服务
  • 网站系统的建设与管理地推拉新app推广平台有哪些
  • 嘉兴高端网站定制接单平台app
  • 网页编辑超级工具箱南京seo建站
  • 做资讯网站盈利seo 优化 工具
  • wordpress网站布置视频教程百度网盘电脑版下载
  • 太原网站网络推广网址安全检测中心
  • 低代码开发平台公司自动app优化下载
  • 顺德网站建设公司怎么在广告联盟接广告
  • 网站建设_制作_设计网站seo报价
  • 常用的品牌策划公司百度seo技术
  • 怎么做网站的登录界面网站制作建设公司
  • 猪八戒网做网站被骗重庆网站到首页排名
  • 唐山网站建设制作sem推广竞价
  • [硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类
  • 【愚公系列】《MIoT.VC》002-构建基本仿真工作站(布局一个基本工作站)
  • VTM 是“H.266/VVC 标准的官方参考软件”视频分析,入门教程,它存在的唯一目的就是“让学术界和工业界在同一把尺子上做实验
  • 6-大语言模型—预训练:数据处理
  • 锁步核,为什么叫锁步核?
  • 爬虫小知识(二)网页进行交互