在Dubbo中有Filter使用,对于Filter来说我们会遇到这样的问题,Filter自身有很多的实现,我们希望某种条件下使用A实现,另外情况下使用B实现,这个时候我们前面介绍@SPI和@Adaptive就不能满足我们要求了,这个时候我们就需要使用@Activate。 Activate注解表示一个扩展是否被激活(使用),可以放在类定义和方法上,Dubbo中用它在扩展类定义上,表示这个扩展实现激活条件和时机。
@SPI public interface ActivateDemo { /** * 测试 * @param msg * @return */ String test(String msg); }
@Activate(group = {"default"}) public class DefaultActivateDemoImpl implements ActivateDemo { @Override public String test(String msg) { return msg; } } @Activate(group = {"groupA","groupB"}) public class ComposeGroupActivateDemoImpl implements ActivateDemo { @Override public String test(String msg) { return msg; } } @Activate(order = 1, group = {"order"}) public class Order1ActivateDemoImpl implements ActivateDemo{ @Override public String test(String msg) { return msg; } } @Activate(order = 2, group = {"order"}) public class Order2ActivateDemoImpl implements ActivateDemo{ @Override public String test(String msg) { return msg; } } @Activate(value = {"value"}, group = {"group"}) public class ValueAndGroupActivateDemoImpl implements ActivateDemo{ @Override public String test(String msg) { return msg; } } 测试案例;
public static void main(String[] args) { ExtensionLoader<ActivateDemo> loader = ExtensionLoader.getExtensionLoader(ActivateDemo.class); URL url = URL.valueOf("test://localhost/test"); List<ActivateDemo> list = loader.getActivateExtension(url, new String[]{}, "order"); System.out.println(list.size()); list.forEach(item -> System.out.println(item.getClass())); }
public static void main(String[] args) { ExtensionLoader<ActivateDemo> loader = ExtensionLoader.getExtensionLoader(ActivateDemo.class); URL url = URL.valueOf("test://localhost/test"); //注意这里要使用url接收,不能直接url.addParameter() url = url.addParameter("value", "test"); List<ActivateDemo> list = loader.getActivateExtension(url, new String[]{"order1", "default"}, "group"); System.out.println(list.size()); list.forEach(item -> System.out.println(item.getClass())); }
@Activate注解标注在扩展实现类上,有 group、value 以及 order 三个属性,三个属性作用如下:
标签:Activate,实现原理,Dubbo,测试案例,端被激活 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。