JavaSPI
package linag.test.dubbo.core.spi.javaspi;
/**
* @author wb-zgl234479
* @create 2018/08/28 20:52
**/
public interface ISayName {
void say();
}
package linag.test.dubbo.core.spi.javaspi;
/**
* @author wb-zgl234479
* @create 2018/08/28 20:52
**/
public class SayChineseName implements ISayName{
@Override
public void say() {
System.out.println("肥朝");
}
}
package linag.test.dubbo.core.spi.javaspi;
/**
* @author wb-zgl234479
* @create 2018/08/28 20:53
**/
public class SayEnglishName implements ISayName{
@Override
public void say() {
System.out.println("Toby");
}
}
package linag.test.dubbo.core.spi.javaspi;
import java.util.ServiceLoader;
/**
* @author wb-zgl234479
* @create 2018/08/28 20:55
**/
public class JavaSpiTest {
public static void main(String[] args) {
ServiceLoader<ISayName> loaders = ServiceLoader.load(ISayName.class);
for(ISayName sayName : loaders) {
sayName.say();
}
}
}

DubboSPI
一、提升性能
1)JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。
2)dubbo spi会缓存class和实例
3)可以直接根据key来获取实例,而不像jdk的spi一样需要循环判断
二 、增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。
博客主要对比了JavaSPI和DubboSPI。DubboSPI在性能上有提升,JDK标准SPI会一次性实例化扩展点所有实现,浪费资源,而DubboSPI会缓存class和实例,还能直接根据key获取实例。此外,DubboSPI增加了对扩展点IoC和AOP的支持,可通过setter注入其它扩展点。
32万+

被折叠的 条评论
为什么被折叠?



