Java开发 java技术介绍( 二 )


这样就做到了不修改一行代码灵活的可拔插选择 IOC 容器了 。
虽然平时并不会直接使用到 SPI 来实现业务,但其实我们使用过的绝大多数框架都会提供 SPI 接口方便使用者扩展自己的功能 。
比如 Dubbo 中提供一系列的扩展:



Java开发 java技术介绍

文章插图
同类型的 RPC 框架 motan 中也提供了响应的扩展:



Java开发 java技术介绍

文章插图


他们的使用方式都和 Java SPI 非常类似,只不过原理略有不同,同时也新增了一些功能 。
比如 motan 的 spi 允许是否为单例等等 。
再比如 MySQL 的驱动包也是利用 SPI 来实现自己的连接逻辑 。



Java开发 java技术介绍

文章插图


Java 自身的 SPI 其实也有点小毛病,比如:
  • 遍历加载所有实现类效率较低 。
  • 当多个 ServiceLoader 同时 load 时会有并发问题(虽然没人这么干) 。
最后总结一下,SPI 并不是某项高深的技术,本质就是面向接口编程,而面向接口本身在我们日常开发中也是必备技能,所以了解使用 SPI 也是很用处的 。
本文所有源码:


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。