内容简介:一些优秀的开源框架,总会给开发者留一个后门,方便实现对其中某一块功能,根据公司自身生态进行有效的扩展,比如Neflix开源的Hystrix,其实Hystrix的代码写的真的很好,除了RxJava那部分晦涩的实现。在Hystrix中的插件实现中,提供了5个扩展点,通过实现这些插件接口,可以很好的结合公司内部框架进行使用,比如数据埋点、动态配置等等,下面以事件通知接口为例子,看看Hystrix是如何实现的。通过
一些优秀的开源框架,总会给开发者留一个后门,方便实现对其中某一块功能,根据公司自身生态进行有效的扩展,比如Neflix开源的Hystrix,其实Hystrix的代码写的真的很好,除了RxJava那部分晦涩的实现。
在Hystrix中的插件实现中,提供了5个扩展点,通过实现这些插件接口,可以很好的结合公司内部框架进行使用,比如数据埋点、动态配置等等,下面以事件通知接口为例子,看看Hystrix是如何实现的。
public HystrixEventNotifier getEventNotifier() { if (notifier.get() == null) { // check for an implementation from Archaius first Object impl = getPluginImplementation(HystrixEventNotifier.class); if (impl == null) { // nothing set via Archaius so initialize with default notifier.compareAndSet(null, HystrixEventNotifierDefault.getInstance()); // we don't return from here but call get() again in case of thread-race so the winner will always get returned } else { // we received an implementation from Archaius so use it notifier.compareAndSet(null, (HystrixEventNotifier) impl); } } return notifier.get(); }
通过 getEventNotifier
方法获取事件通知器,当然了,一开始是没有初始化的,先尝试使用 getPluginImplementation
方法,看看能不能拿到,拿不到就使用本地默认的实现。
private <T> T getPluginImplementation(Class<T> pluginClass) { T p = getPluginImplementationViaProperties(pluginClass, dynamicProperties); if (p != null) return p; return findService(pluginClass, classLoader); }
这里,Hystrix还提供了另外一种实现,很简单,就不解释了,这里的重点是 findService
实现。
private static <T> T findService(Class<T> spi, ClassLoader classLoader) throws ServiceConfigurationError { ServiceLoader<T> sl = ServiceLoader.load(spi, classLoader); for (T s : sl) { if (s != null) return s; } return null; }
其实,这里的实现是使用 Java 内置的SPI机制,SPI是什么?
SPI 全称为 Service Provider Interface),是一种服务提供发现机制,通过 ServiceLoader
类的load方法,可以自动找到实现对应接口的实现类,为了更清晰的了解其中原理,可以去看看load方法的源码实现。
一个大概的过程是:load方法会尝试在classpath下META-INF/services/文件夹下查找一个文件,其中文件名是接口的全限定名。
如上图所述, CacheKeyFilter
是一个接口,在这个文件中,需要指定接口实现类的全限定名。
当然了,你也可以换行指定多个,找到这些实现类之后,会通过反射机制,即 class.newInstance()
进行实例化,这就要求实现类需要有无参构造函数,
通过这种方式,我们就可以愉快的对开源框架所提供的接口进行扩展,加入各种骚操作,还不动手试试?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 开源 | Hippy:腾讯开源的跨端开发框架
- WeGeek | WePY 开源框架
- 开源 | vnpy:基于 Python 的开源量化交易平台开发框架
- 开源Botnet框架Byob分析
- 滴滴开源小程序框架 Mpx
- 【开源公告】H5、小程序自动化测试框架FAutoTest正式开源
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Windows API编程范例入门与提高
东方人华 / 清华大学出版社 / 2004-1-1 / 38.00
本书通过大量实用、经典的范例,以Visual Basic为开发平台由浅入深地介绍了Windows API编程的基本方法和大量的实用技巧。本书采用实例带动知识点的形式,使读者快速入门并逐步得到提高。本书每节即是一个实例,操作步骤详尽,所用到的源文件均可在网站下载。读者可以按照操作步骤完成每个实例的制作,并根据自己的喜好进行修改、举一反三。 本书内容翔实,凝结了作者多年的编程经验,既适合......一起来看看 《Windows API编程范例入门与提高》 这本书的介绍吧!