甜腻的嘴角|Dubbo如何通过SPI提高框架的可扩展性?( 四 )
如果想用JdkCompiler需要做如下配置
Compiler类图如下
@SPI("javassist")public interface Compiler {Class> compile(String code, ClassLoader classLoader);}Compiler用@SPI指定了默认实现类为javassist
源码中获取Compiler调用了如下方法
org.apache.dubbo.common.compiler.Compiler compiler = ExtensionLoader.getExtensionLoader(org.apache.dubbo.common.compiler.Compiler.class).getAdaptiveExtension();getAdaptiveExtension()会获取自适应扩展类 , 那么这个自适应扩展类是谁呢?
是AdaptiveCompiler , 因为类上有@Adaptive注解
@Adaptivepublic class AdaptiveCompiler implements Compiler {private static volatile String DEFAULT_COMPILER;public static void setDefaultCompiler(String compiler) {DEFAULT_COMPILER = compiler;}/*** 获取对应的Compiler , 并调用compile做编译* 用户设置了compiler , 就用设置了的 , 不然就用默认的*/@Overridepublic Class> compile(String code, ClassLoader classLoader) {Compiler compiler;ExtensionLoader从compile方法可以看到 , 如果用户设置了编译方式 , 则用用户设置的 , 如果没有设置则用默认的 , 即JavassistCompiler
自动激活使用@Activate注解 , 可以标记对应的扩展点默认被激活使用
@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE, ElementType.METHOD})public @interface Activate {// 所属组 , 例如消费端 , 服务端String[] group() default {};// URL中包含属性名为value的键值对 , 过滤器才处于激活状态String[] value() default {};// 指定执行顺序 , before指定的过滤器在该过滤器之前执行@DeprecatedString[] before() default {};// 指定执行顺序 , after指定的过滤器在该过滤器之后执行@DeprecatedString[] after() default {};// 指定执行顺序 , 值越小 , 越先执行int order() default 0;}可以通过指定group或者value , 在不同条件下获取自动激活的扩展点 。 before , after , order是用来排序的 , 感觉一个order参数就可以搞定排序的功能 , 所以官方把before , after标记为@Deprecated
Dubbo Filter就是基于这个来实现的 。 Dubbo Filter是Dubbo可扩展性的一个体现 , 可以在调用过程中对请求进行进行增强
我写个demo演示一下这个自动激活是怎么工作的
@SPIpublic interface MyFilter {void filter();}consumer组能激活这个filter
@Activate(group = {"consumer"})public class MyConsumerFilter implements MyFilter {@Overridepublic void filter() {}}provider组能激活这个filter
@Activate(group = {"provider"})public class MyProviderFilter implements MyFilter {@Overridepublic void filter() {}}consumer组和provide组都能激活这个filter
@Activate(group = {"consumer", "provider"})public class MyLogFilter implements MyFilter {@Overridepublic void filter() {}}
推荐阅读
- 甜腻的嘴角|领空安全不容侵犯!俄战机向美军亮出导弹,几天后尴尬一幕发生
- 彩色科技|Dubbo自适应扩展机制
- 甜腻的嘴角|造芯有多耗电?台积电一年用143.3亿度电!台湾都要供不起了
- 甜腻的嘴角|华为Mate40稳了,麒麟9000备货1000万片,不愁断货
- 环球网|聊天记录撒娇卖萌超甜腻,男子没想到女朋友竟是“抠脚大汉”!
- 甜腻的嘴角|爷青结!腾讯微博将于9月28日停止服务和运营
- 甜腻的嘴角|九号B80电动自行车评测:2000元不到的出行神器?
- 甜腻的嘴角|手机即将“报废”的5个前兆,一旦出现赶紧换手机
- 第一财经|唯观纽约|若美股已陷于浪漫甜腻的“La La Land”,那美国经济基本面又是什么?
- 甜腻的嘴角|刚花2499买的新手机,有一点后悔了。
