事实上已经有童鞋对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. Methods and systems for sharing common job information

    Apparatus and methods are provided for utilizing a plurality of processing units. A method comprises ...

  2. ASP.NET-EF基础知识

    定义 asp.net Entity Framework是微软以ADO.NET为基础发展出来的对象关系对应(OR Mapping)解决方案.   三种EF工作模式(自己理解的) 从数据库表创建类 从类创 ...

  3. xBIM 基础04 日志操作

    系列目录    [已更新最新开发文章,点击查看详细]  xBIM使用Log4Net来记录异常不适合的处理错误和警告.它在xBIM几何引擎中被大量使用来记录所有几何错误.如果您的文件看起来不太正确,则应 ...

  4. Web前端错题模糊题记录

    title: Web前端错题模糊题记录 toc: true date: 2018-09-20 10:04:36 categories: Web tags: HTML CSS JavaScript HT ...

  5. BZOJ 4568 倍增维护线性基

    在树的路径上选取一些点 使得这些点权xor后的结果最大 思路: 时限60s 59696ms卡过去了哈哈哈 //By SiriusRen #include <cstdio> #include ...

  6. echarts中国地图

    echarts中国地图效果图: =================== 需要引入echarts的js文件:(1.echarts.min.js:2.china.js) 下载地址: echarts.min ...

  7. JS常用框架及各自特点

    JavaScript 是面向对象的脚本语言,长期以来用作 Web 浏览器应用程序的客户端脚本接口React:起源于Facebook,并与2013年开源,是一个用于构建用户界面(主要是UI)的JavaS ...

  8. kindEditor编写插件遇到的问题

    kindEditor是一个功能强大的在线文本编辑器,而且提供了插件扩展功能,更好的满足用户各方面的需求.在项目中,我们就有如此的需求:在kindEditor编辑器中,添加一条下划线,并且在下划线的中间 ...

  9. 【原创】ActiveMQ集群JDBC持久化

    在activemq.xml中配置持久化方式: <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDa ...

  10. php截取字符串|php截取字符串前几位|php截取中文字符串

    转 截取字符串专题:php截取字符串函数,php 字符串长度,php截取字符串前几位 PHP截取中文字符串(mb_substr)和获取中文 => http://www.q3060.com/lis ...