dubbo的spi思想是什么


本篇内容主要讲解“dubbo的spi思想是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“dubbo的spi思想是什么”吧!spi 是啥?
spi,简单来说,就是service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。举个栗子。你有一个接口A。A1/A2/A3 分别是接口A的不同实现。你通过配置接口A=实现A2,那么在系统实际运行的时候,会加载你的配置,用实现A2实例化一个对象来提供服务。spi 机制一般用在哪儿?插件扩展的场景,比如说你开发了一个给别人使用的开源框架,如果你想让别人自己写个插件,插到你的开源框架里面,从而扩展某个功能,这个时候 spi 思想就用上了。spi 经典的思想体现,大家平时都在用,比如说 jdbc。Java 定义了一套 jdbc 的接口,但是 Java 并没有提供 jdbc 的实现类。但是实际上项目跑的时候,要使用 jdbc 接口的哪些实现类呢?一般来说,我们要根据自己使用的数据库,比如 mysql,你就将mysql-jdbc-connector.jar引入进来;oracle,你就将oracle-jdbc-connector.jar引入进来。在系统跑的时候,碰到你使用 jdbc 的接口,他会在底层使用你引入的那个 jar 中提供的实现类。dubbo 也用了 spi 思想,不过没有用 jdk 的 spi 机制,是自己实现的一套 spi 机制。Protocol 接口,在系统运行的时候,,dubbo 会判断一下应该选用这个 Protocol 接口的哪个实现类来实例化对象来使用。它会去找一个你配置的 Protocol,将你配置的 Protocol 实现类,加载到 jvm 中来,然后实例化对象,就用你的那个 Protocol 实现类就可以了。上面那行代码就是 dubbo 里大量使用的,就是对很多组件,都是保留一个接口和多个实现,然后在系统运行的时候动态根据配置去找到对应的实现类。如果你没配置,那就走默认的实现好了,没问题。在 dubbo 自己的 jar 里,在/META_INF/dubbo/internal/com.alibaba.dubbo.rpc.Protocol文件中:所以说,这就 香港云主机看到了 dubbo 的 spi 机制默认是怎么玩儿的了,其实就是 Protocol 接口,@SPI("dubbo")说的是,通过 SPI 机制来提供实现类,实现类是通过 dubbo 作为默认 key 去配置文件里找到的,配置文件名称与接口全限定名一样的,通过 dubbo 作为 key 可以找到默认的实现类就是com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol。如果想要动态替换掉默认的实现类,需要使用@Adaptive接口,Protocol 接口中,有两个方法加了@Adaptive注解,就是说那俩接口会被代理实现。啥意思呢?比如这个 Protocol 接口搞了俩@Adaptive注解标注了方法,在运行的时候会针对 Protocol 生成代理类,这个代理类的那俩方法里面会有代理代码,代理代码会在运行的时候动态根据 url 中的 protocol 来获取那个 key,默认是 dubbo,你也可以自己指定,你如果指定了别的 key,那么就会获取别的实现类的实例了。下面来说说怎么来自己扩展 dubbo 中的组件。自己写个工程,要是那种可以打成 jar 包的,里面的src/main/resources目录下,搞一个META-INF/services,里面放个文件叫:com.alibaba.dubbo.rpc.Protocol,文件里搞一个my=com.bingo.MyProtocol。自己把 jar 弄到 nexus 私服里去。然后自己搞一个dubbo provider工程,在这个工程里面依赖你自己搞的那个 jar,然后在 spring 配置文件里给个配置:provider 启动的时候,就会加载到我们 jar 包里的my=com.bingo.MyProtocol这行配置里,接着会根据你的配置使用你定义好的 MyProtocol 了,这个就是简单说明一下,你通过上述方式,可以替换掉大量的 dubbo 内部的组件,就是扔个你自己的 jar 包,然后配置一下即可。dubbo 里面提供了大量的类似上面的扩展点,就是说,你如果要扩展一个东西,只要自己写个 jar,让你的 consumer 或者是 provider 工程,依赖你的那个 jar,在你的 jar 里指定目录下配置好接口名称对应的文件,里面通过key=实现类。然后对于对应的组件,类似用你的那个 key 对应的实现类来实现某个接口,你可以自己去扩展 dubbo 的各种功能,提供你自己的实现。到此,相信大家对“dubbo的spi思想是什么”有了更深的了解,不妨来实际操作一番吧!这里是开发云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: ES解决深分页问题以及实现Scroll 查询 API的示例分析

这篇文章给大家介绍ES解决深分页问题以及实现Scroll 查 香港云主机询 API的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ES 普通的分页查询有深分页限制,默认是10000条。(因为越往后面分越耗内存)所以要查询1万条以后…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 09/21 11:14
Next 09/21 11:14

相关推荐