事实上已经有童鞋对Zico的源代码和执行过程进行了总结,比如:http://www.cnblogs.com/shuaiwang/p/4522905.html。这里我再补充一些内容。

当我们使用mvn
install将Zico打包成war包后,将其解压后能够看到MANIFEST.MF文件里指定的主类是:com.jitlogic.zico.main.ZicoMain,简单看一下这个类,发现其主要作用是启动Jetty Web Server,并载入配置文件,实现一些安全配置。那么我们须要问了,这个war包是怎么实现trace数据的接收和处理的呢?我们以下简单分析一下:

我们注意到其web.xml中有较多关于resteasy的配置,依照网友博客上的介绍:RESTEasy是JBoss的开源项目之中的一个,是一个RESTful Web Services框架。RESTEasy的开发人员Bill Burke同一时候也是JAX-RS的J2EE标准制定者之中的一个。

上面这段话的出处在这里:http://blog.csdn.net/rubyzhudragon/article/details/7355383,在这篇博客中。也给出了作者使用RESTEasy时的web.xml文件。进行一下对照。我们能够注意到,上面这篇博客中定义的listener是:org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap。而在Zico的设置中定义的是:com.jitlogic.zico.core.inject.ZicoRestBootstrapListener,对照一下源代码。发现后者是继承了:org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener,通过类名能够推測。实现的作用是差点儿相同的。须要注意的是,从类名来看,这里使用了Guice这个框架,Guice是由Google大牛Bob
Lee开发的一款绝对轻量级的java IoC容器。

Bob Lee也被人称为“疯狂的Bob”,其Twitter ID是:@crazybob,哈哈,实在不知道这哥们为什么有这样的称号,他已经于几年前从Google离职了。

言归正传,在RESTEasy的文档中也介绍了其对Guice的支持:http://docs.jboss.org/resteasy/docs/3.0.9.Final/userguide/html_single/index.html#Guice1,结合网友的介绍:http://blog.csdn.net/zhangzz1127/article/details/17428173,我们能够注意到。确实应该改成Zico中的那种配置。

相同。依据官网,要实现IoC,须要在web.xml中指定注冊服务类,在Zico中的配置例如以下:

<context-param>
<param-name>resteasy.guice.modules</param-name>
<param-value>com.jitlogic.zico.core.inject.ProdZicoModule</param-value>
</context-param>

这个类须要实例化com.google.inject.Module接口。并实现它的configure(Binder binder)方法,详细到Zico上的实现,我们能够看到,ProdZicoModule这个继承了AbstractZicoModule这个类,而后者确实实例化了上面这个接口。在这两个类的configure方法中都进行了一些依赖注入(或称翻转控制,IoC)的操作。

所以IoC这部分的过程就全然搞清楚了。以下再简单说说Zico是怎么启动接收数据等服务的。事实上非常easy。我们返回到刚才说的listener:com.jitlogic.zico.core.inject.ZicoRestBootstrapListener,略微看看它的源代码。

依照RESTEasy的Java Doc介绍:http://docs.jboss.org/resteasy/docs/3.0.9.Final/javadocs/org/jboss/resteasy/plugins/guice/GuiceResteasyBootstrapServletContextListener.html,对于类org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener而言。其子类须要Override其withInjector方法。并在方法内部和Injector对象进行交互,正是有了这样的功能。所以通过这一句:

injector.getInstance(ZicoService.class).start();

我们实际上就调用了com.jitlogic.zico.core.ZicoService这个类的start方法。可以看到,在这里就实现了启动监听等功能。然后Zico的其它功能也就開始执行了(单从这个过程来看。我实在看不出IoC在这里面起到的作用)。相信通过这种总结。大家可以对Zico的执行过程有一个稍深入的了解。

Zico源代码分析:执行启动过程分析和总结的更多相关文章

  1. Appium Android Bootstrap源代码分析之启动执行

    通过前面的两篇文章<Appium Android Bootstrap源代码分析之控件AndroidElement>和<Appium Android Bootstrap源代码分析之命令 ...

  2. u-boot 源码分析(1) 启动过程分析

    u-boot 源码分析(1) 启动过程分析 文章目录 u-boot 源码分析(1) 启动过程分析 前言 配置 源码结构 api arch board common cmd drivers fs Kbu ...

  3. Disconf源码分析之启动过程分析下(2)

    接上文,下面是第二次扫描的XML配置. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.Dis ...

  4. MonkeyRunner源代码分析之启动

    在工作中由于要追求完毕目标的效率,所以很多其它是强调实战.注重招式.关注怎么去用各种框架来实现目的.可是假设一味仅仅是注重招式.缺少对原理这个内功的了解,相信自己非常难对各种框架有更深入的理解. 从几 ...

  5. 【Java】【Flume】Flume-NG源代码分析的启动过程(两)

    本节分析配置文件的解析,即PollingPropertiesFileConfigurationProvider.FileWatcherRunnable.run中的eventBus.post(getCo ...

  6. Disconf源码分析之启动过程分析上(1)

    Disconf的启动,主要是包括两次扫描和XML非注解式配置,总共分为上下两篇,上篇先主要介绍第一次静态扫描过程. 先从入口分析,通过Disconf帮助文档,可以看到xml必须添加如下配置. < ...

  7. zico源代码分析(一) 数据接收和存储部分

    zorka和zico的代码地址:https://github.com/jitlogic 由于zico是zorka的collecter端,所以在介绍zico之前首先说一下zorka和数据结构化存储和传输 ...

  8. zico源代码分析(二) 数据读取和解析部分

    第一部分:分析篇 首先,看一下zico的页面,左侧是hostname panel,右侧是该主机对应的traces panel. 点击左侧zorka主机名,右侧panel会更新信息,在火狐浏览器中使用f ...

  9. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...

随机推荐

  1. MyBatis学习总结(1)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. NYIST 973 天下第一

    天下第一时间限制:1000 ms | 内存限制:65535 KB难度:3 描述AC_Grazy一直对江湖羡慕不已,向往着大碗吃肉大碗喝酒的豪情,但是“人在江湖漂,怎能 不挨刀",”人在江湖身 ...

  3. java语言MySQL批处理

    本质来讲就是使用Statement和PreStatement的addBatch()方法 代码 import java.sql.*; public class GetConnection{ public ...

  4. HDU 5187 zhx&#39;s contest(防爆__int64 )

    Problem Description As one of the most powerful brushes, zhx is required to give his juniors n probl ...

  5. iOS 从各种效果图颜色标注生成 UIColor

    iOS 从各种效果图颜色标注生成 UIColor 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  6. Oracle 学习笔记 13 -- 控制用户权限

    数据库控制语言的功能室控制用户对数据库的存取权限. 用户对某类数据具有何种操作权限是有DBA决定的.Oracle 通过GRANT语句完毕权限的授予,通过REVOKE语句完毕对权限的收回. 权限分为系统 ...

  7. No connection could be made because the target machine actively refused it [::1]:808

    No connection could be made because the target machine actively refused it [::1]:808 1.首先查看端口占用情况, 在 ...

  8. Compiler Warning (level 2) CS0436

    https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0436 // CS0436_a.cs // compile with: /target:l ...

  9. ThinkPHP5.0框架开发--第11章 TP5.0 杂项

    ThinkPHP5.0框架开发--第11章 TP5.0 杂项 第11章 TP5.0 杂项 =============================================== 今日学习 1. ...

  10. Kettle和ETL的基本构成

    不多说,直接上干货! 这里,我说的通俗易懂点,好方便大家的理解. ETL解决方案就像业务流程一样,具有输入.输出,以及一个或多个工作环节,处理步骤.同样的,这些步骤也具有输入和输出,并可以执行将一个输 ...