GeorgeWang地字3号

JQuery、Node.js http://www.pecloud.cn/

导航

Spring.Net入门篇概述 - Spring的野心

象我们描述一般的社会迭代的过程一样:上一代的人依据权利和社会资源牢牢的控制着整个社会的根基,但是他们在下一代人看来,他们的想法是如此的陈旧,行事如此的没有理性,于是打破这种腐朽成了年轻一代与年老一代开战的导火索,弱势的年轻一代从边缘战役和时间的协助,最终将老一代尘封到历史中,他们的痕迹一点也不留。而年轻一代站稳脚跟的时候,生长中的下一代同样开始挑衅起来刚坐稳屁股的这一代。

    Spring的诞生要从EJB(Enterprise JavaBean)的诞生说起,这个故事看起来很象宫廷政变或者其他的权利交替,BBC惯用的手法就是用猴子讲哈姆雷特,用老虎讲李尔王。而我们讲解的这两位可就直白的多了。

     首先说一下企业级开发,我们对企业级开发总能提出一两点自己的看法,分布式应用、复杂多变的需求以及最难对付的遗留系统。这些东西翻译到技术上就会成为中间件、框架、SOA等。如果你对COM有一些了解而恰又用过Delphi,你可以想象一下如果没有Delphi等工具帮助,让你自己从自己实现IInterface接口,来完成COMObject的编程,那是一件多么可怕的事情。而恰恰EJB在这个职能上没有起到Delphi的作用,才有了下面的故事。

    Rod Johnson在《expert one-on-one J2EE Development without EJB》中回顾了EJB和J2EE(Java 2 Platform,Enterprise Edition)在1998年时候的狂飙岁月。(我假设你对Java有一定的了解,至少对这些缩写词有自己基本的认识)

    J2EE直指企业级的开发应用,而EJB则被推崇为J2EE核心。看看EJB的做出承诺:EJB将使编写应用程序变得简单。应用开发者将不需要理解底层事务和状态管理的细节、多线程、资源池、以及其他复杂的底层的API。同时EJB承诺在不同的应用服务器之间是可移植的。为什么EJB做出的承诺如此的诱人,使得众多的厂商热力追捧?

    回归到1998年的企业软件开发的世界。微软发布了他的MTS(Microsoft Transaction Server)---一个专有的、过分依赖COM/DCOM以及对C++和其他语言并不优雅的扩展的企业组件框架。而CORBA功能尽管强大,但是其复杂的实现,对C++之类语言的依赖也令人望而生畏。而CORBA本质上是用于分布式组件通讯的,而不是管理应用对象的。这样看来简单又开放的EJB成了人们追捧的目标也不足为奇。但是糟糕的是J2EE的规范本身是在实现之前形成的,EJB成了J2EE半乌托邦的一块基石。而2001-2002年当J2EE的标准付诸实践以后,由于Java语言本身的问题(当时为1.2版本)以及EJB复杂的实现开始使其饱受质疑,批评之声也开始甚嚣尘上。
     J2SE1.3增加的动态代理使得session bean不在需要代码生成的支持,而entity bean则被许多Java的业内人士诟病为糟糕的技术,包括Rod Johnson本人,除了message-driven bean, EJB甚至引来了COM+专家Roger Sessions 的批评。

     软件工程在2002年以后有一些长足的发展,包敏捷开发和测试驱动等,开始对传统的软件过程做出挑战,而Spring对EJB的挑战只不过是一出小小的戏剧。当被EJB惹怒的Rod Johnson碰到受过敏捷开发洗礼的Rod Johnson,神话这个被软件工程界一次又一次被否定的词语再次被打破(关于神话的问题可以参考Roger S . Pressman 的《Software Engineering - A Practitioner's Approach》,我手头的这本是第六版)。轻量级、实现和接口分离的Spring开始成型,但是象伊壁鸠鲁试图用哲学来解释一切一样(虽然他的大部分著作已经遗失了),Spring更是以EJB的替代者的姿势现身(EJB暂时还不能被替代。),如果你手头上能拿到另一本Rod Johnson的书《Spring框架高级编程》,这种气势从那本书的目录就足可以看出来--目的就是从IoC,AOP到资源管理,事务访问提供EJB的替代方案。

      然而Spring.net交付到.Net开发界来以后,似乎没有带来什么波澜,关键问题就是我们没有EJB那样痛楚的制造者,所以说服备受煎熬下的Java程序员来理解Spring绝对比说服处在安逸条件下的.Net的程序员要容易的多。而.Net开发人员也会陷入一种问题的怪圈,为什么我要用Spring.Net,他有什么用处,他好像与我的开发没有太大的关系。而另一个人们常常犯下的错误就是:因为他好我们就要使用他。我也曾经不止一次的犯下这种错误,对没有OOP基础的人的强制使用模式,对不理解测试驱动的人强制使用单元测试,结果都是一样的失败,这些都曾经是我们公司的实例。所以我极其反感这种不对坏境进行考察而盲目推行的做法。单纯因为好而使用和单纯因为反对而反对是一样的愚蠢。

       Rod Johnson 《expert one-on-one J2EE Development without EJB》,个人认为最应该推荐给.net程序员看的Java的图书,在本书中他穿插了很多关于.Net和Java开发的比较,这种客观中立的态度是难能可贵的。Rod Johnson 非常反感政治因素在软件开发中的作用,从他的书中引用马基雅维利(为达目的不择手段即为马基雅维利主义),帝国本位主义等可以看出来,不过即使这样,下面一节的话题,多多少少与政治有点关系。
         

从战国时代到封建专制

    如果从个人感觉来说,.Net更像老婆,而Java更象情人。老婆可以为你做好一切,给你洗衣服做饭,为你的臭习惯收拾残局。而情人就可以柏拉图,从维特根斯坦扯到福柯,从福特文格勒飙到卡拉扬,从帕慕克拽到德波顿。搞的你非得自诩自己是萨特而人家是波伏娃,你是罗丹人家是卡蜜儿。(严重跑题中.....)

    然而实际的情况是.Net的开发人员和Java的开发人员总有点互相瞧不起的意味,Rod Johnson告诉我们,谁要是傻到在TheServerside.com或者其他J2EE门户网站上发表与J2EE相关的.Net的新闻,立即就会骂声一片,.Net这边也好不到那里去。极端二元论者在我们这个世界处处存在,.Net 和Java让他们搞得老死不相往来。这种不拿自己的脑子想问题的人,他们根本不知道独立思考为何物。然而生活就象是一袭爬满跳蚤的华丽长衣。透过跳蚤看世界:
 
     .Net企业平台只不过是J2EE在微软实现模式下的专有化形式。
     Java1.5将为Java添加源码级元数据,以及C#风格的“自动装箱”功能
     JBoss4采用.Net风格的元数据来驱动企业服务。
    ......
     如果我们用Google Earth来鸟瞰两个开发界,借助于这些党团政治人的眼光,我更愿意用这个小节的题目来形容。

    Java国:

        开源运动好像造就了今天的Java开发界,自由成为一种时尚的追求,在另一个文化的圈圈里面,从胡适到李敖,至少你还能看到它的一点影子。(因为自由好我们就要自由,你就会又陷入上面说的那种思维的怪圈,如果那样,可以请出卡尔.波普尔的《开放社会及其敌人》了。)Sun的地位原来可以稳坐周天子之位,但是开源运动的兴起和JDK的源代码的开放,使得诸侯争霸的战国局面开始形成,尤其是那个不能小觑的IBM,如此这般,不得不建立一个JCP来管理的周、召共和执政(这个要比战国时代开始还早)。《程序员》杂志在05年曾搞过一个策划叫《Java这十年》看起来颇有演义的味道(虽然我对程序员杂志编辑的水平有所保留)。我既没有斯塔夫里阿诺斯的知识渊博,又没有黄仁宇先生的大历史观,所以只能简单的分战场来描述这场混战。(以下资料来源于07年及以前,不包括08年的资料)
   
      JDK方面:JDK5 引入了泛型(Generic Types)和标注(Annotation)的新功能,而Sun公布Java SDK 6.0后,IBM发布了IBM SDK for Java 6 beta,而BEA(被Oracle收购)也接着发布了JRockit Mission Control2.0的JVM实现。
      开发工具方面: Eclipse与Netbeans依然混战,但Eclipse的地位看起来倒是非常稳固。
      Web框架方面:Structs遭遇JSF/Tapestry,好像基于事件驱动型的JSF更被看好一些。
       移动开发方面:无异Google的Android成了明星,很有可能给JavaMe制造一个大麻烦。
       其他的方面如应用服务器、Ajax框架、动态语言支持由于篇幅不再详细介绍。
       回到Java企业级开发的方面:
          打着简化开发旗号的EJB3.0和JavaEE5 搭档,看起来好像不那么的可恶。EJB3.0广泛应用标注(Annotation)用来简化数据库映射文件的配置和session bean的依赖注入。最耐人寻味的是对于JavaEE6标准的制定时,Spring的创始人Rod Johhson亦在邀请之列,应验了市场竞争没有永远的敌人那句话。横向方面集成AspectJ的Spring遭遇JBoss Seam框架的挑战。值得注意的是:新IoC框架Google Guice(号称比Spring快100倍,彪悍语录!)的出现,它改变了Spring使用XML静态配置依赖关系的方式,改为采用标注(Annotation)来声明Bean的依赖,通过专门的module机制进行Bean的依赖的组装。但是Spring2.5很快就实现了这一方式。我更愿意用第一节开头的规律来看待这次只不过是Google Guice对刚坐稳屁股的Spring一次边缘战役。
  
    .Net国:

       如果上面那个国家的历史有遗漏的话,那唯独没有说明微软在Java开发界的地位。貌视威廉三世却心怀鬼胎结果导致了与Sun和java的彻底决裂。.Net可以说是那场决裂在微软掌控的专制世界里的副产品,这个产品是如此的雄心勃勃,搞得微软自己都有点晕头转向。Com/.Net技术专家Richard Grimes在05年的那次与.Net的公然决裂,似乎让我们看到了.Net技术掺杂了太多微软在销售和市场上的策略,而技术创新因素好像被滞怠了。不要太埋怨微软,好像技术开发人员对于商业这种阴暗外围相当的有抵触,保持了一种自由的洁癖。但是作为将一个商业和技术捏合,又受到看不见的手的掌控的、随时在一个月内就消亡(彪悍语录!)的微软,商业利益不可能不成为其首选目标,可怜的M$好像可以得到一点点宽容。

      微软在.Net方面的努力还是有目共睹的,.Net3.5和Vs2008开始交付,WCF/WPF( WPF/E 或者叫SilverLight)/WF开始释出,将使得微软在企业开发和Web开发领域将取得更好的成绩。最让人玩味的是对于.Net Framework的“开源”,微软也开始趟这趟浑水,不过总的来说还是利大于弊的。

     大多数安逸的.Net程序员好像被微软宠坏了,可以考虑的事情越来也少,微软都替我们做了,不管你真的要还是不要。于是看起来都那么的不聪明,远不及Win32下的那些老牌选手。如果你还想一再安逸下去,建议你多了解一下这个即将变得扁平的世界!
   
     Spring.Net:

     邻国的一场Spring对EJB的战斗,激战正酣,而Spring.Net只不过是溅到我们国家的一点火花。


我们都是白老鼠
 

       当巴普洛夫在研究他的狗的胃液和铃声的关系的时候,可能皮亚杰正在研究人类的认识的发生,当然也包括了巴普洛夫怎么认识他的狗。或者同时社会学家在研究皮亚杰的对人类认识的这种研究是不是会对社会进步做出贡献。碰巧的是哲学家正在研究他们三个之间的内在联系。忽然之间,我们发现我们自己或者其他人都成为自己或者别人研究的对象,成了一只只虚拟构建的实验室里的白老鼠。

       然而人类追求普世真理的愿望远比制造永动机更强烈,推开上面对于开发语言的区分,其实我们真正面对的问题是不是有什么共同点呢,我们都是在开发企业应用吗?我们都会碰到需求反复变动的问题吗?我们都会碰到代码难于维护的问题吗?

      上面那些探讨可能要撇在我们的文章之外,毕竟这是一篇介绍Spring.Net的文章。除了这篇概述以外,接下来将说明关于IoC容器和AOP方面的知识,也是入门篇的全部。关于Spring.Net的其他方面的应用将另起一个系列来论述。可能在我论述下一个系列的时候,微软已经发布了类似Spring的实现,但是我们将要介绍的IoC和AOP将还会有实际的意义。

 
  后面的话:

          写这篇概述,实在让我感觉捉肘见襟,不停的翻阅材料,也许一年以后我再看这篇的文章的时候会发现现在的我是多么的幼稚和可笑,但是我还是写出来了,当作对逝去的时光的一个总结吧!
 (由于能力有限,论述不免有些偏颇。只是个人理解,如有偏差,欢迎批评指正!)

posted on 2010-07-01 14:32  GeorgeWang  阅读(410)  评论(0编辑  收藏  举报