58同城开源的轻量级web框架 https://github.com/58code/Argo

今天开头说说抽象,面向对象的特点:抽象、继承、多态,好的设计都是基于优秀的抽象,抽象层次越高、越完善,他的扩展性就越好,也越容易理解。好比居家过日子,多多少少需要一些工具,可切割的、可裁剪的,这就是两个interface,于是我们准备了刀和剪子,就是一种实现。再后有了水果刀和切菜刀、园艺剪子和裁衣服剪子,这就是多态。再然对菜进行分类,把荤素分开,准备同样的两把菜刀,一把切荤的一把切素的,就是重载。

中心思想就是以特性为核心,然后一点点的实现,过程中可以对底层不同特性组合使用,但是尽量保持最高抽象级别,以便于……(你懂的)

看看ArgoFilter 的 init()方法

public void init(FilterConfig filterConfig) throws ServletException {ServletContext servletContext = filterConfig.getServletContext();try {dispatcher = ArgoDispatcherFactory.create(servletContext);dispatcher.init();} catch (Exception e) {servletContext.log("failed to argo initialize, system exit!!!", e);System.exit(1);}}

ArgoDispatcherFactory.create(servletContext) 进入之后看到简单的两行代码

1. GroupConvention groupConvention = GroupConventionFactory.getGroupConvention();

这句话是获取了一个默认的约定配置。Argo的配置分为组织级和项目级,组织级包括配置文件路径configFolder(),日志文件路径logFolder(),组织级Guice的注入Module module(),项目级包括项目ID  id(),所有的controller类 controllerClasses(),项目级Guice的注入Module module()。

2.Argo.instance.init(servletContext, groupConvention);

这里对全局的Argo进行初始化。instance应该是一个静态实例,Argo不是用Guice么,怎么还能看见new,这种强引用的初始化方法暴露出来,难道不怕重复加载导致错误么。再去看看这个init方法。里面的onlyOnce.check();可以保证只进行一次初始化,看来是自己写的一个工具类了。

List<Module> modules = Lists.newArrayList();
modules.add(new ArgoModule(this));Module groupModule = groupConvention.group().module();
if (null != groupModule)modules.add(groupModule);Module projectModule = groupConvention.currentProject().module();
if (null != projectModule)modules.add(projectModule);

看到了吧,秘密在这里,Argo本身用的 Module是 ArgoModule,此外还允许开发者定义自己的 Module,组织级和项目级分得很明确,就是SOA的基石,统一由Argo的Guice来管理调度。(有远见!)

this.argoDispatcher = getInstance(ArgoDispatcher.class);
return argoDispatcher;

init()方法返回ArgoDispatcher,ArgoDispatcher绑定的实现是 com.bj58.argo.internal.DefaultArgoDispatcher,Argo 用于处理请求的 调度中心。看得出他的service方法    public void service(HttpServletRequest request, HttpServletResponse response) 就是处理方法了。

这次看到这里,可以知道Argo底层应该是面向大型企业架构的一种简单抽象,具体实现到什么程度以后继续深入。

58同城开源web框架 Argo (四)相关推荐

  1. 开源web框架_带有酷名称的开源JavaScript和Web框架的词汇表

    开源web框架 It's getting to the point where there are so many cool open source projects that I can't kee ...

  2. Java开源Web框架

     WebWork   点击次数:18070 WebWork 是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架.WebWork目前最新版本是2.1,现 ...

  3. 开源web框架django知识总结(二十二)

    开源web框架django知识总结(二十二) 支付 提示: 如果用户选择的支付方式是 "支付宝" ,在点击<去支付>时对接支付宝的支付系统. 支付宝介绍 支付宝开放平台 ...

  4. .NET Core第三方开源Web框架YOYOFx

    YOYOFx框架 YOYOFx是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台. 本着学习的态度,造了这个轮子,也是为了更好的了解各个框架的原理和有点,还希望可 ...

  5. python web论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  6. 十个基于Python的BBS论坛类开源web框架汇总(附源码地址)

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  7. python论坛系统源码_十个基于Python的BBS论坛类开源web框架汇总(附源码地址

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  8. python bbs论坛_十个基于Python的BBS论坛类开源web框架汇总(附源码地址)

    1.LBForum LBForum是用django开发的论坛系统,LBForum主要注重部署的方便性和易用性,功能方面目前还比较简单. LBForum的开发尽量遵照Django可复用app原则,因此即 ...

  9. web版本 开源压测工具_标星 1.3K 的 Web 框架压测库,助你更好的选择框架

    大家好,我是你们的章鱼猫. 目前开源界有很多的 Web 框架,而一款好的 Web 框架能够给你在开发效率和后期维护上减少很多不必要的麻烦.所以在项目初期选择一款好的 Web 框架至关重要. 在 Go ...

最新文章

  1. lvs+iptables持久连接
  2. 三相逆变器双pi控制器参数如何调节_Boost 变换器 PI参数设计举例
  3. mysql udb_将Uhost上的MySQL迁移到UDB
  4. Ubuntu 16.04 安装网易云音乐
  5. 宝塔命令号操作全-最实用的莫过于修改密码啦
  6. 学习笔记:首次进行JUnit+Ant构建自动的单元测试(一)
  7. CVPR 2020|超越H.265,中科大使用多帧数据改进视频压缩新方法
  8. 很有趣的一道题:找出有毒的瓶子
  9. SqlDictionary表,使用SQL语句查询TableID
  10. DPM2010 粒度恢复个人用户邮箱
  11. Spring Data JPA整合Redis缓存的配置
  12. 2019年数维杯数学建模A题 我国省际生态环境与经济交互状况的综合评价求解全过程文档及程序
  13. SnagIt9.0过了适用期,弹出关于的窗口解决办法
  14. python 拼音 四线格_拼音四线三格中的写法示意及书写注意事项
  15. win10查看网卡的方法
  16. 让tp6显示错误信息及行号
  17. 阿里云服务器是国内的还是国外的?
  18. Facebook第三方登录对接
  19. 工程建设项目全套流程,门清!
  20. Oracle PLSQL

热门文章

  1. MOX:开创区块链通证参与电影融资的新篇章
  2. 前窗玻璃膜贴了一周还有气泡_新车前挡风玻璃贴膜后有气泡几天能下去
  3. c语言西南交通大学出版社答案,西南交通大学C++上机实验答案
  4. 切换页面导致计时器停止,JS暂停!
  5. 华为手机打开图片很慢是怎么回事_华为手机打开应用很慢怎么办
  6. .find()的用法
  7. Tableau基础-第一章(初学者)
  8. R语言文本挖掘展示:画词云图
  9. 计算机网络-学习笔记
  10. 服装企业的ERP实施是有条件的