SPI这个机制是java自身就带有的功能,往期文章JAVA-SPI机制 但是有一些不便之处,如下!
- 不能按需获取实现类(也就是按需加载)不能实现IOC、AOP原生的JAVA-SPI是加载所有,会造成资源浪费
那么Dubbo的SPI就可以实现按需加载,那么也就可以避免资源浪费,和Spring结合实现IOC和APO,同时还新增加了自适应扩展机制。那么接下来我们就来看看Dubbo的SPI机制怎么玩!
Dubbo-API案例环境准备
创建一个Maven工程,什么包都先不导入!
导入dubbo依赖
或则 org.apache.dubbo dubbo3.0.0 com.alibaba dubbo2.6.2
本文使用的是2.6.2的这个版本,为了保持源码分析的时候代码一致,最好版本和我一样
编写接口LoginService
@SPI(FailbackCluster.NAME) public interface LoginService { public String login(); }
提供QQ、微信、短信登录实现类
QqLoginServiceImpl
public class QqLoginServiceImpl implements LoginService { @Override public String login() { return "QQ登录"; } }
SmsLoginServiceImpl
public class SmsLoginServiceImpl implements LoginService { @Override public String login() { return "sms登录"; } }
WxLoginServiceImpl
public class WxLoginServiceImpl implements LoginService { @Override public String login() { return "WX登录"; } }
创建接口全限定名命名的文件
resources目录下创建meta-INF/dubbo目录 文件名为LoginService的全限定名
创建测试方法
public class DubboSpiApplication { public static void main(String[] args) { ExtensionLoaderextensionLoader = ExtensionLoader.getExtensionLoader(LoginService.class); LoginService wx = extensionLoader.getExtension("wx"); System.out.println(wx.login()); LoginService qq = extensionLoader.getExtension("qq"); System.out.println(qq.login()); } }
启动测试
那么这里就可以根据接口全限定名按需加载我们所需要的实现类,而不是想原生JAVA的SPI机制全部加载!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)