论坛首页 Java企业应用论坛

Google Guice - 比Spring快100倍的IoC容器

浏览 53220 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-28  
类似的形式在commons中出现:
source: package org.apache.commons.lang;

public class ObjectUtils {
   public static final Null NULL = new Null();
   
      public static class Null implements Serializable {
        private static final long serialVersionUID = 7092611880189329093L;
        Null() {
            super();
        }        
        /**
         * <p>Ensure singleton.</p>
         * 
         * @return the singleton value
         */
        private Object readResolve() {
            return ObjectUtils.NULL;
        }
    }
}[size=9][/size]
0 请登录后投票
   发表时间:2007-02-28  
真的好用的东西就应该赶快拿来实践一下。建议牛人实践一下介绍经验。
0 请登录后投票
   发表时间:2007-02-28  
quaff 写道
ahuaxuan 写道
如果光讲这个“快”的话不能看比例吧,1毫秒和100毫秒对用户来说没有什么区别,用spring到现在从来没有它有多慢,现在搞的分布式系统里,感觉remote session bean才叫个真慢,呵呵

spring慢也是在容器启动的时候慢,做的事情多自然就慢了,guice只是一个IoC容器而已,IoC只是spring的一部分

你以为guice在启动的时候不慢吗,它也要load整个对象图,你看看lz的连接就知道guice有没有aop了,并且如果把spring中配置的bean设置位lazy-init,那spring的启动也是非常快的。虽然spring不只ioc,但是你也可以只用ioc啊,所以spring在启动的时候并不会比guice多做多少事
0 请登录后投票
   发表时间:2007-02-28  
如果没有了配置文件了 那IOC的注入还是以来JAVA代码中的标记来实现,与代码过于耦合了吧
0 请登录后投票
   发表时间:2007-02-28  
ajoo 写道
robbin 写道
http://code.google.com/p/google-guice/

Google公司的Bob lee开发的轻量级IoC容器,其特点是:

1、速度快,号称是spring的100倍速度
2、无配置文件,实用JDK5.0的annotation描述组件依赖,简单,而且有编译器检查和重构支持
3、简单,代码量很少

http://code.google.com/p/google-guice/wiki/SpringComparison

这是Google guice和spring IoC容器的对比

另外xwork2.0已经集成了Google guice容器了。

http://docs.google.com/Doc?id=dd2fhx4z_5df5hw8

这是Google guice的快速入门文档,用起来挺简单的。

spring确实是超级慢啊。

这个guice看起来不那么embeddable,不知道谁用过ejb3的dependency injection的?给比较一下?

我比较喜欢的功能:
1。快
2。静态检查。没用过,不知道能达到什么程度。
3。没有特殊的setter injection,这样显得更优雅。

有点犹豫的:
1。说是ultra-lightweight。可能是指代码量说的。从侵入性来讲,要求组件import Guice的Annotation,这不太lightweight——当然,从实用角度来讲也不一定就是大不了的问题。


ajoo咋没比较一下yan和guice咧,早晨看到这个帖子就等着ajoo来拍转呢:)
0 请登录后投票
   发表时间:2007-03-01  
spring可不仅仅是启动慢这么简单.getBean()就很慢的。以前做过一个benchmark(http://docs.codehaus.org/display/YAN/Performance+Test+(Nuts+vs+Spring)),spring的prototype bean最坏情况比yan慢29倍。而yan并不是从效率角度着眼设计的。大量的indirection,抽象在yan中存在,这些都可能影响效率。

这也就是说,想做一个ioc容器比spring还慢的,也不是那么容易的。

所以说,Guice比spring快100倍我并不惊讶。(猜想可能Guice用了特殊的reflection,比如cglib的reflection增强?看bob lee的blog确实有使用cglib reflection可以提高reflection效率的文章)

当然,挺spring最有力的说法就是,getBean()的效率并不重要。因为理想情况是整个app在启动时由spring把所有依赖都注射完毕,然后就没spring的事了。getBean()仅仅调用一次就够了。
如果这样的话,快一百万倍都没有意义了。




关于yan和guice的比较。首先我不是很熟悉guice,不好比。

但是粗略看上去,guice是从可用性和效率着眼的,而yan着眼于灵活性和embeddability。一个容器直接用也许就需要那么寥寥几个功能,但是要是嵌入到别的应用里面,根据要嵌入的应用的不同需求,可能要非常变态的灵活性才能满足。

yan也许更应该和pico放在一起比。而guice和spring才是更竞争的关系。

无论如何,欢迎任何对spring容器的竞争,因为spring的容器代码和设计确实不太漂亮。
0 请登录后投票
   发表时间:2007-03-01  
justcode 写道
无配置文件这点上,不知道是不是优点......



XML解析总比反射耗时,而且不支持重构。
0 请登录后投票
   发表时间:2007-03-01  
快100倍,好像夸张了点,spring慢主要是读取配置,动态注入慢了.核心部分并不慢,spring能够动态注册单列bean.
要是guice也动态注册单列bean,和spring来测试,
谁快谁慢还不一定.
0 请登录后投票
   发表时间:2007-03-01  
100 倍是不是 用了 中国的 夸张 的修饰词啊 !
0 请登录后投票
   发表时间:2007-03-01  
下载了一个guice用了一下,guice真难用,但guice是要快一点
大概测试一下,快不会超过10倍.大概在4-5倍.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics