Spiderman源码分析(三)Fetcher

            这节我们来看看Spiderman中的Fetcher模块的设计和实现。

            从这个模块开始就可以很明显的体现出Spiderman本身的微内核+插件化的总体设计思想,纵观Spiderman的源码设计,我们可以总结出,所谓的微内核,其本质上就是抽象出业务系统中不变的东西,例如:通用的配置,通用的业务框架,另外就是从变得东西中总结出不变的,再将这些东西转换成面向对象设计的类,用设计模式加以组织,就可以作为一个系统中底层和框架性的东西,从而使之具有高度的可扩展性和生命力,对于一个普通的工程师来讲,要能很好的具备这方面的能力,必须要经过反复的实践,总结,再实践,在这个螺旋式上升的过程中始终坚守设计模式的七大基本原则(哪七大原则?大家都回想一下,呵呵),只有这样,才能由量变到质变,最终才能在通往卓越的架构师之路上更进一步,有点跑题了,言归正传,下面我们就具体来看看Fetcher模块是如何做到微内核+插件化的。

            在Spiderman的core包的fetcher包中,可以看到关于Fetcher的类并不多也不复杂,总共就这几个类FetchRequest,FetchResult,Page,PageFetcher,SpiderConfig,Status。不多不少刚刚好,这些类基本覆盖了Fetcher模块所有的共性和不变的东西,例如:FetchRequest定义了fetcher的输入,FetchResult定义了输出,Page保存了下载下来的页面,由于一个页面有很多自身的属性,因此把页面单独作为一个类是合理的,PageFetcher则定义了所有具体的Fetcher类要遵守的接口,SpiderConfig则包含了下载页面时会用到的一些基本参数设置,而且这些参数基本上都是可以在每个Site的配置文件可配的。另外在core包的plugin包中提供了FetchPoint接口,由于这些类的定义都比较通俗易懂,在这里不在累述。

            可以看出没有具体的负责fetch的类,而在plugin包的util包中,提供了各式各样的fetche实现类,他们分别基于不同的开源包,有:基于htmlunit的HtmlUnitDownloader,基于httpclient的HttpClientDownloade

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值