阅读更多

29顶
1踩

编程语言

原创新闻 祝贺Guice拿了Jolt Award

2008-03-10 12:28 by 见习记者 ajoo 评论(34) 有11602人浏览
我对计算机界的八卦一向都不太敏感,也对很多所谓的“名人”不感兴趣。你说那章子仪,Britney好歹还能拿脸蛋,衣服,和衣服里面的东西来娱乐大众,一帮不知道哪来的猥琐男就写了点谁都能写的程序,又不是证明了歌德拔河,也不是火箭科学,有什么好追星的?

所以对Guice拿了Jolt也是后知后觉。不过在知道Guice是打败了Spring拿到的奖的,还是颇觉得欣慰了一下。

要说Guice也不是多完美,很多功能的缺失还是对使用造成了些障碍的。所谓的“EDSL”,或者马丁嚼了嚼前人吃剩的东西再吐出来给大众继续啃的“fluent interface”,给测试,扩展和阅读稳当都造成了很大的麻烦。(我的jparsec, rparsec系列也可以自称是fluent interface,比如你可以说foo.many.map {...}之类的,但是它的每一步本身都具有完整的语义,而且都统一地是一个Parser对象,而不是额外引入乱七八糟古里古怪的中间类型。)

不过,你看跟什么比吧。这Spring,号称open-source,但是奉劝你还是闭着眼睛用,千万别好奇心起,往里面看什么代码。那设计,那代码,叫一个乱,真是让人不忍心看下去。

作者也是一根筋,遇着要客户扩展功能的,必然是弄个什么MyChitterlingAware接口,然后instanceof到处用,然后跑到文挡里一丝不苟孜孜不倦地加上一章“如果实现了MyChitterlingAware接口,那么你就会自动得到我的原始的带着消化系统鲜活气息的大肠一段”;然后整个系统中谁也不知道到底有多少XYZAware的special case。

遇着不同的目标场景,必然是弄一个子类,什么"ChitterlingApplicationContext extends ClassPathApplicationContext", "SpicyChitterlingApplicationContext extends ChitterlingApplicationContext",而且如果某个MyChitterlingAware对象需要从appcontext得到东西,必然是要实现一个BeanFactoryAware,然后再判断"instanceof ChitterlingApplicationContext"。最后弄了一个非常sophisticated的类继承图,显得好专业呀;

遇着逻辑分支,比如singleton与否,必然是一个"if (isSingleton()) {...}";

就算眼馋人家用java写配制可以重构,也还是脑子不带转弯地拿xml那套写JavaConfig,代码看上去还是xmlish,一点也不pojo;

所有OO初学者能干的蠢事,似乎都一五一十一板一眼地干了一遍。

那个,你要说了,那为什么人家那么成功?“一站式”啊,不管啥玩艺儿,一股脑都给你塞进来,这个主意还是很有市场的;“vendor lock-in”啊。这么多应用,这么多框架,都依赖于ChitterlingAware,你说你能想不干就不干了?“竞争对手实在不争气”啊,那个什么ejb,吓跑了多少“我其实就想写点程序呀”的程序员?

现在好了,终于有一个decent的DI framework并且能够不被劣币给驱逐了。无疑这个成功相当程度上得力于Google这个名字,谢谢,crazybob,谢谢,Google。

29
1
评论 共 34 条 请登录后发表评论
14 楼 robbin 2008-03-10 22:00
用Google Guice,你要封装事务,调用JPA持久化,实际上比Spring要简单的多,零配置,而不是一堆堆spring的XML,两三行代码而不是spring的一陀陀回调代码。至于说Struts2,已经内置Guice,至少Google的Adwords团队就是用Struts2和Guice的,应该不比spring支持的差吧。至于啥Quartz,JavaMail啥的,稍稍改一两行配置就可以直接拿过来在Guice上面用。

要说离不开的还是人的惰性和保守。
13 楼 sp42 2008-03-10 21:51
以前我们写代码不是行数越少越好的吗?
怎么这个“光荣传统”到现在好像没什么人说了?
12 楼 sp42 2008-03-10 21:50
以前我们写代码不是行数越少越好的吗?
怎么这个“光荣传统”到现在好像没什么人说了?
11 楼 fkpwolf 2008-03-10 20:59
看不到看不懂
10 楼 sunlin 2008-03-10 20:35
我发觉我离不开spring  
调用quartz用spring 
发邮件用spring
事务声明用spring
调用jpa用spring
用strust2时候以spring作为默认ioc容器

我们的项目可以不用spring,但会付出更大成本
可以不用spring来调用quartz,但麻烦
可以不用spring发邮件,但麻烦
可以不用配置的方式搞事务,自己写,麻烦
可以不用spring来调用jpa,但麻烦
可以不用spring作为struts2的ioc容器,但还没花时间看怎么弄

我们的项目用了很多的所谓框架,我想了一下,这么多的框架之中,如果要换其中一个的话,换spring成本最高

我知道很多的xml,这样不是很好,但是我宁愿配置一下xml就把quartz搞定了,也不愿意用java代码来告诉计算机怎么用quartz
我宁愿配置一下xml把事务搞定了,不愿意用java代码告诉计算机怎么对付事务

Guice拿奖了,一定有他的原因和好处。但是我很笨,通过你的文章看不懂好的地方
9 楼 极品老驴 2008-03-10 18:56
ajoo调侃得好!文采不错,若泼妇骂街有此水平,我天天上大街看去。

Spring本来就是没什么技术含量的东西,被一帮大小“实用主义”者捧得像金锅里的窝窝头,动辄xml-ing一切,factory-ing一切,本是批判EJB起家,如今看那个1百多M的大包让Spring露出本来面目,从EJB2.0的时代开始就觉得Spring的bean factory就是local ejb的变种——挂羊头卖狗肉的东西,n多项目从未用过spring,组织良好的Singlelon类,简单明了的facade模式,没有spring的几百万人民币的项目一样开发高效、运行良好。

该有新的东西出来了,Guice算是一个,有空研究去。
8 楼 neptune 2008-03-10 17:40
看你做多大的应用,小应用用guide,而如果要是大应用,不知楼主除了spring这些重量级,还会用什么?
7 楼 fujohnwang 2008-03-10 17:37
6 楼 tedeyang 2008-03-10 17:36
泼妇骂街,就是有理都掉份
5 楼 bocar 2008-03-10 14:23
Guice本来就是:简单并且类型安全的。我们现在的应用绝大多数不就那个DI容器的应用吗?说白了就是一个抽象工厂的应用,几乎所有的框架都有factory接口以供调用的吧,把这些factory接口让Guice的DI来管理就可以实现Spring的诸多功能。比如最近在看的warp-persist就是一例。
4 楼 kyo100900 2008-03-10 13:48
  Guice的这一类思想很有前途,就算Guice没有成功,但肯定还有别的类似Guice的东东继承发扬光大。
3 楼 simohayha 2008-03-10 13:26
哈哈,ajoo老大看来极度鄙视spring。。。
2 楼 cnpollux 2008-03-10 13:02
Guice不懂除了DI还能干什么?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • sisu-guice-2.1.7-noaop.jar

    sisu-guice-2.1.7-noaop.jar

  • mybatis-guice

    这个是项目主要是演示mybatis集成google的guice的案例,在网上guice的例子真是太少了

  • guice-3.0-API文档-中文版.zip

    赠送jar包:guice-3.0.jar; 赠送原API文档:guice-3.0-javadoc.jar; 赠送源代码:guice-3.0-sources.jar; 赠送Maven依赖信息文件:guice-3.0.pom; 包含翻译后的API文档:guice-3.0-javadoc-API文档-中文(简体)版...

  • guice-3.0-API文档-中英对照版.zip

    赠送jar包:guice-3.0.jar; 赠送原API文档:guice-3.0-javadoc.jar; 赠送源代码:guice-3.0-sources.jar; 赠送Maven依赖信息文件:guice-3.0.pom; 包含翻译后的API文档:guice-3.0-javadoc-API文档-中文(简体)-...

  • guice-4.0-API文档-中文版.zip

    赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)版...

  • guice-multibindings-3.0-API文档-中文版.zip

    赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-3.0-sources.jar; 赠送Maven依赖信息文件:guice-multibindings-3.0.pom; ...

  • shiro-guice

    <groupId>org.apache.shiro <artifactId>shiro-guice <version>1.3.2 </dependency>

  • Guice依赖注入(Provider)

    本教程主要详细讲解Guice依赖注入中的Procider服务注入实现,一般都是用于外部服务的注入,比如实现Redis等。 基础环境 技术 版本 Java 1.8+ Guice 4.2.3 初始化项目 初始化项目 mvn archetype:...

  • Learning Google Guice

    谷歌Guice开发英文文档,很详细,对开发很有帮助,可当成工具书使用!

  • Guice集成Properties配置

    在大多数项目中我们经常会使用到读取配置文件,用于适配自定义的属性值等,本教程我们主要通过实现对Properties的解析实现基于Guice的配置解析Module. 基础环境 技术 版本 Java 1.8+ Guice 4.2.3 初始化...

  • guice-4.0-API文档-中英对照版.zip

    赠送jar包:guice-4.0.jar; 赠送原API文档:guice-4.0-javadoc.jar; 赠送源代码:guice-4.0-sources.jar; 赠送Maven依赖信息文件:guice-4.0.pom; 包含翻译后的API文档:guice-4.0-javadoc-API文档-中文(简体)-...

  • guice-multibindings-3.0-API文档-中英对照版.zip

    赠送jar包:guice-multibindings-3.0.jar; 赠送原API文档:guice-multibindings-3.0-javadoc.jar; 赠送源代码:guice-multibindings-3.0-sources.jar; 赠送Maven依赖信息文件:guice-multibindings-3.0.pom; ...

  • guice-3.0.rar

    guice-3.0,轻量级IOC容器,包含guice-3.0.jar、guice-spring-3.0.jar、guice-struts2-plugin-3.0.jar

  • guice-jersey:Guice模块,用于使用Jersey启动基于Jetty的休息服务器

    如果您使用Guice作为依赖项注入框架,并且想将自己的类注入到您创建的JAX-RS类中(例如“资源”和“过滤器”),则需要弥合这两个DI框架之间的鸿沟。 该模块旨在通过启动基于Jetty的Jersey服务器并初始化HK2与Guice...

  • sisu-guice-3.1.3-no_aop.jar

    sisu-guice-3.1.3-no_aop.jar

  • guice-assistedinject-3.0-API文档-中英对照版.zip

    赠送jar包:guice-assistedinject-3.0.jar; 赠送原API文档:guice-assistedinject-3.0-javadoc.jar; 赠送源代码:guice-assistedinject-3.0-sources.jar; 赠送Maven依赖信息文件:guice-assistedinject-3.0.pom;...

  • guice-servlet-3.0.jar

    guice-servlet-3.0.jar

  • Java guice3.0轻量级的依赖注入框架 组件

    Java guice3.0轻量级的依赖注入框架 组件guice 是轻量级的依赖注入框架,依赖注入是类将他们的依赖声明为参数,而不是直接创建依赖的一种设计模式。

  • 基于Qt开发的截图工具- 支持全屏截图, 支持自定义截图,支持捕获窗口截图,支持固定大小窗口截图,颜色拾取,图片编辑

    基于Qt开发的截图工具.zip 截图工具(QScreenShot) Qt编写的一款截图工具。 特点 - 支持全屏截图 - 支持自定义截图 - 支持捕获窗口截图 - 支持固定大小窗口截图 - 颜色拾取 - 图片编辑 - 图片上传到wordpress 环境 Qt6.2 QtCreate 8

Global site tag (gtag.js) - Google Analytics