美文网首页阿里巴巴
为什么dubbo要自己设计一套SPI?

为什么dubbo要自己设计一套SPI?

作者: 阿甘java | 来源:发表于2017-11-15 23:47 被阅读20次

这是原始JDK spi的代码

ServiceLoaderserviceLoader=ServiceLoader.load(Command.class); 

 for(Command command:serviceLoader){ 

 command.execute();

 } 

dubbo在原来的基础上设计了以下功能

1.原始JDK spi不支持缓存;dubbo设计了缓存对象:spi的key与value 缓存在 cachedInstances对象里面,它是一个ConcurrentMap

2.原始JDK spi不支持默认值,dubbo设计默认值:@SPI("dubbo") 代表默认的spi对象,例如Protocol的@SPI("dubbo")就是 DubboProtocol, 通过 ExtensionLoader.getExtensionLoader(Protocol.class).getDefaultExtension()那默认对象

3.jdk要用for循环判断对象,dubbo设计getExtension灵活方便,动态获取spi对象, 例如 ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(spi的key)来提取对象

4.原始JDK spi不支持 AOP功能,dubbo设计增加了AOP功能,在cachedWrapperClasses,在原始spi类,包装了XxxxFilterWrapper XxxxListenerWrapper5.原始JDK spi不支持 IOC功能,dubbo设计增加了IOC,通过构造函数注入,代码为:wrapperClass.getConstructor(type).newInstance(instance),

相关文章

网友评论

    本文标题:为什么dubbo要自己设计一套SPI?

    本文链接:https://www.haomeiwen.com/subject/oajkvxtx.html