Zico源码分析:运行启动过程分析和总结
来源:互联网 发布:vx交友软件 编辑:程序博客网 时间:2024/04/29 09:42
其实已经有童鞋对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是怎么启动接收数据等服务的,其实很简单,我们返回到刚才说的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源码分析:运行启动过程分析和总结
- UIAutomator源码分析之启动和运行
- UIAutomator源码分析之启动和运行
- UIAutomator源码分析之启动和运行
- UIAutomator源码分析之启动和运行
- zico源代码分析(一) 数据接收和存储部分
- tomcat源码---启动过程分析
- Activity启动过程源码分析
- 源码分析Flume启动过程
- Tomcat源码分析--启动过程
- scrapy启动过程源码分析
- Activity启动过程源码分析
- Activity启动过程源码分析
- Activity启动过程源码分析
- peer启动过程源码分析
- macOS启动过程源码分析
- 源码分析Flume启动过程
- Amoeba源码分析一:启动过程分析
- Oracle Coherence中文教程十四:缓存数据来源
- back_door__ctf2015 team
- 【五】nginx的数据结构(3)——扩展红黑树
- 类的大小——sizeof 的研究(1)
- Oracle Coherence中文教程十五:序列化分页缓存
- Zico源码分析:运行启动过程分析和总结
- Oracle Coherence中文教程十六:使用群体
- Minor GC、Major GC和Full GC之间的区别
- c单链表小案例1
- Oracle Coherence中文教程十六:使用群体
- 大一
- Oracle Coherence中文教程十七:缓存配置案例
- C++中的引用与指针的区别
- 【知识点整理(Android)】SharedPreferences的使用心得