Zico源代码分析:执行启动过程分析和总结
事实上已经有童鞋对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源代码分析:执行启动过程分析和总结的更多相关文章
- Appium Android Bootstrap源代码分析之启动执行
通过前面的两篇文章<Appium Android Bootstrap源代码分析之控件AndroidElement>和<Appium Android Bootstrap源代码分析之命令 ...
- u-boot 源码分析(1) 启动过程分析
u-boot 源码分析(1) 启动过程分析 文章目录 u-boot 源码分析(1) 启动过程分析 前言 配置 源码结构 api arch board common cmd drivers fs Kbu ...
- Disconf源码分析之启动过程分析下(2)
接上文,下面是第二次扫描的XML配置. <bean id="disconfMgrBean2" class="com.baidu.disconf.client.Dis ...
- MonkeyRunner源代码分析之启动
在工作中由于要追求完毕目标的效率,所以很多其它是强调实战.注重招式.关注怎么去用各种框架来实现目的.可是假设一味仅仅是注重招式.缺少对原理这个内功的了解,相信自己非常难对各种框架有更深入的理解. 从几 ...
- 【Java】【Flume】Flume-NG源代码分析的启动过程(两)
本节分析配置文件的解析,即PollingPropertiesFileConfigurationProvider.FileWatcherRunnable.run中的eventBus.post(getCo ...
- Disconf源码分析之启动过程分析上(1)
Disconf的启动,主要是包括两次扫描和XML非注解式配置,总共分为上下两篇,上篇先主要介绍第一次静态扫描过程. 先从入口分析,通过Disconf帮助文档,可以看到xml必须添加如下配置. < ...
- zico源代码分析(一) 数据接收和存储部分
zorka和zico的代码地址:https://github.com/jitlogic 由于zico是zorka的collecter端,所以在介绍zico之前首先说一下zorka和数据结构化存储和传输 ...
- zico源代码分析(二) 数据读取和解析部分
第一部分:分析篇 首先,看一下zico的页面,左侧是hostname panel,右侧是该主机对应的traces panel. 点击左侧zorka主机名,右侧panel会更新信息,在火狐浏览器中使用f ...
- Android应用程序内部启动Activity过程(startActivity)的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...
随机推荐
- Document properties
http://devnet.kentico.com/docs/7_0/devguide/index.html?document_properties_overview.htm You can edit ...
- m_Orchestrate learning system---八、下拉列表(select标签)如何实现链接功能
m_Orchestrate learning system---八.下拉列表(select标签)如何实现链接功能 一.总结 一句话总结:option的值就是链接地址,选择事件为指向选中的option的 ...
- 文本编辑工具 Vim
Vim是Vi的升级版 vi和Vim的区别在于vi不会显示颜色,Vim会显示颜色 1.如果没有,可以安装 #yum install -y vim-enhanced
- (四)Hystrix容错保护
Feign默认是整合了Ribbon和Hystrix这两个框架,所以代码我们在上一篇的基础上进行修改,启动Eureka,service-hello,Feign 所谓的熔断机制和日常生活中见到电路保险丝是 ...
- git相关整理
title: git相关整理 toc: false date: 2018-09-24 20:42:55 git merge 和 git merge --no--ff有什么区别? git merge命令 ...
- .NET框架详解
.NET框架的战略目标 .NET框架的战略目标是在任何时候(When),任何地方(Where),使用任何工具(What)都能通过.NET的服务获得网络上的任何信息,享受网络带给人们的便捷和快乐! .N ...
- Homebrew的安装及使用
Homebrew是Mac上的软件包管理工具,能在Mac中方便的搜索安装卸载软件. 1 安装 在终端输入一下代码,回车,即可下载. ruby -e "$(curl -fsSL https:/ ...
- php如何实现文件下载
php如何实现文件下载 1. 设置超链接的href属性 <ahref="文件地址"></a> 如果浏览器不能解析该文件,浏览器会自动下载.而如果文件是图片或 ...
- CDR X6低价还能持续多久?官方回应18年元旦过后要涨价
目前,CDR X6特价活动,从双十二的到18年的元旦,火热程度一直屡刷新高,究其原因,其实不是大家不需要,只是这个平面设计软件价格实在太高(CDR X8/8200:CDR 2017/9500一套),尤 ...
- Collections库使用
Date: 2019-05-27 Author: Sun Collections库 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collec ...