首页 技术 正文
技术 2022年11月21日
0 收藏 490 点赞 3,042 浏览 2203 个字

事实上已经有童鞋对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,结合网友的介绍: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的执行过程有一个稍深入的了解。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,950
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,476
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,289
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,107
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,739
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,772