Archive for 六月, 2010

使用依赖注入框架Google Guice替代new和工厂类

星期五, 六月 25th, 2010

在新系统中使用了Guice来统一了对象注入和创建方式,也不是刻意为之,而是由两个经典问题引起的:
1)对于对象的创建,可以使用new、静态工厂、抽象工厂等方式,使得对象创建方式不统一,而使用哪种方式最好也很难有定论,并且随着代码的变化,创建方式也可能会需要有更好的变化。
2)对于类成员的设置,最直接的是在类内部直接创建,但这样硬编码会影响灵活的测试性,解决的方法是通过外部注入成员,好处自不必说,但在一个复杂的系统中,类之间的关联及层次关系,使得一个上层对象的创建往往需要依赖多个下层的类,使得对象创建代码变的冗余而复杂。
解决上面两个问题,我就想到了依赖注入(DI)框架(也被成为IOC容器,取控制反转之意),我需要选择一个得手的依赖注入框架来满足需求。

分享“The Four Meta Secrets of Scaling at Facebook”

星期天, 六月 20th, 2010

在highscalability.com上翻看最新的文章,一文 The Four Meta Secrets of Scaling at Facebook 很不错。下面做些简要的中文介绍并续上自己的解读。 Facebook的规模及技术水平不消我多说,其对开源社区的贡献更是有目共睹。“The Four Meta Secrets of Scaling at Facebook”不是关于Facebook的技术架构方面的细节,而是在扩展并发展Facebook这样的大规模高复杂增长速度快的网站过程中,积累的 4点有借鉴意义的观点。

Netty实现原理浅析

星期六, 六月 19th, 2010

Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面的内容有错误或不严谨的地方,也请指正和谅解。对于Netty使用者来说,Netty提供了几个典型的example,并有详尽的API doc和guide doc,本文的一些内容及图示也来自于Netty的文档,特此致谢。

Netty使用初步

星期六, 六月 19th, 2010

Java1.4提供了NIO使开发者可以使用Java编写高性能的服务端程序,但使用原生的NIO API就像Linux C中网络编程一样,还是需要做IO处理、协议处理等低层次工作。所以,就像C服务端程序大量使用libevent作为网络应用框架一样,Java社区也不断涌现出基于NIO的网络应用框架。在这其中,Jboss出品的Netty就是个中翘楚。Netty是个异步的事件驱动网络应用框架,具有高性能、高扩展性等特性。Netty提供了统一的底层协议接口,使得开发者从底层的网络协议(比如TCP/IP、UDP)中解脱出来。就使用来说,开发者只要参考 Netty提供的若干例子和它的指南文档,就可以放手开发基于Netty的服务端程序了。
在Java社区,最知名的开源Java NIO框架要属Mina和Netty,而且两者渊源颇多,对两者的比较自然不少。实际上,Netty的作者原来就是Mina作者之一,所以可以想到,Netty和Mina在设计理念上会有很多共同点。我对Mina没什么研究,但其作者介绍,Netty的设计对开发者有更友好的扩展性,并且性能方面要优于Mina,而Netty完善的文档也很吸引人。所以,如果你在寻找Java NIO框架,Netty是个很不错的选择。本文的内容就是围绕一个demo介绍使用Netty的点点滴滴。

在Java中使用脚本语言

星期六, 六月 5th, 2010

有一段时间没有搞Java,对于Java5以来一些新特性了解也不多,这几天看Solr的DIH,发现个很不错的配置支持–脚本引擎。以前提Java,是一处编译到处运行,现在可以说是一个平台多种语言。借此机会,整理了下Java6中引入的脚本引擎的相关特点和功能