Google轻量级"依赖注入"框架Guice 1.0开源发布
上周,Google将其内部使用的轻量级“依赖注入”(Dependency Injection)框架Guice 1.0版本在Google Code Project上开源发布了。Guice(发音同juice,即果汁)是针对Java 5以及之后的版本来开发的,大量应用了基于注解(annotations)和泛型(generics)编程特性,使得代码的开发量和重复工作大大减少。
初看了一下Guice,觉得值得研究关注一下的地方有:支持任意输入参数的构造器、类成员和方法的依赖注入;灵活的自定义注入范围(scope)和循环依赖;与Spring,Struts的集成支持;面向方面编程(AOP)的类方法拦截器支持等等。
先抛开Guice不谈,从我的平时实践经历上来说,Java 5之后带来的特性,诸如泛型、枚举型、新for循环、静态常量import等都用的非常多了,但是annotations这一块用得倒真的不是很多,仅仅限于一些标准的使用,而没有从自定义annotations的角度来尝试一下如何提高开发和配置效率呢。究其原因,也可能是我觉得很多东西大家把development guidelines定下来后,各自遵守应用就行了,但随着重构进行和持续变化,的确有些时候重复地做了一些大同小异的事情,从而导致有些小小的混乱了。因此,接下来倒也是可以考虑来借鉴着做点这方面的小尝试吧。
再来说说“依赖注入”,记得很早之前Martin Fowler就写过一篇模式分析的文章,题为“Inversion of Control Containers and the Dependency Injection pattern”,推荐一看。万变不离其宗,这一系列相关的模式以及框架,大都还是围绕着“灵活松耦合”这个核心展开的。这个在我们的日常开发设计过程中的确也是反复地被实践应用着,但大都是手工实现的,基本没有采用那些所谓的轻量级框架(这有主观的,也有客观的原因)。诚然,这样手工的反复实现和改动的确会带来开发效率和清晰性的欠缺,但从另外一方面来讲,其运行时执行和调试的效率也无疑又是比较令人满意的了。最后,还是归结到一个“折衷”的问题,即一个框架是否“适用”或者说有无必要研究借鉴并重新“定制”实现要取决于实际情况。
William Cui 崔伟毅


4 Comments:
嘿嘿,前两天也看到这个新闻。还没来得及细看,和Spring比有什么优点?最近越来越发现Spring,Hibernate之类都太复杂,有冲动要写一个轻量级的数据库访问库,不要ORM。
Guice比Spring更轻量级,而且由于大量运用了annotation,配置起来更直接灵活吧。但我觉得对于分散式的基于annotation的配置是否真的比集中式的基于xml配置好还是不好,这个人是一个可以争论的问题,要视情况而定,再来“折衷”一下哦。
你说的轻量级数据访问库,我有点不是很明白,如果是传统的关系型数据库访问,还是先研究一下JPA的标准吧,因为要考虑的东西还是蛮多的,做到后来也不一定轻量到哪去。此外,还有比较热的对象数据库db4o,曾经也大概地看过一下,觉得在某些场合还是非常不错的选择。
我是看了PHP的一些代码才想到要在Java里面也实现一个差不多的东西。这两天研究了一下PHP的CodeIgniter框架,真的是做的非常非常非常的方便。怪不得LAMP的流行。
重复早轮子有意义吗?
Post a Comment
Links to this post:
Create a Link
<< Home