上篇阐述了JDK标准的SPI,并对其应用做了相应的实践。在实际应用中,很多框架都会对其进行扩展改进实现该框架下的SPI。为什么呢?
通过将上篇的实践案例增加一个HelloService的实现发现其明显的不足,特别是资源紧张的时候:
执行主程序,查看结果:
通过结果,可以看到JDK标志的SPI会一次性实例化所有扩展点的实现。如果资源紧张且扩展实现初始化很耗时而有些扩展并没有用上,会相当浪费资源。
实践中实现类加断点,执行主程序查看其初始化的进度:
如果不继续执行,通过结果可以看到打断点本身的实现类不会加载,没有打断点的实现类也不会加载(加载顺序与文件内容顺序一致)。所以可能出现如果有扩展点加载失败,则所有扩张点均无法使用的情况。
dubbo框架解决了以上两个问题同时扩展了其他相关的功能。dubbo的jar中可以看到其通过SPI的方式定制化实现了哪些扩展点:
下面实践使用dubbo扩展点的方式:
1、引入dubbo依赖,创建接口在接口上标注@SPI
2、实现类项目中
1)导入api依赖
2)建立实现类
3)SPI进行声明操作
3、执行主程序项目
1)导入坐标接口项目和实现类项目
2)创建执行类
执行结果如下:
前面提及了两个JDK标准中SPI的问题,那么在dubbo中其解决了么?后续文章介绍。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。