简单说,我认为Spring框架一直在强迫你使用Java的一个子集,确切说是框架的一个子集,并且一直以来偷偷地影响到支持它的框架。它含有创新和有限的选择。还有其他更多的东西。  但是不幸的是,因为时间有限,在这里我不可能把所有的道理都列出来。我宁愿给出几个例子来展示一下Spring的套路真的不适合我。当然你也可以告诉我说Sping能支持这个,或者说Spring从XX版本以后就开始支持了。这些我可不在乎。到现在为止,Spring已经存在了相当长的一段时间,而我的评判也是基于相当长的一段历史的。还有就是我所要讲的是框架的文化。  首先,如果你想要使用Spring Beans你就要相信它的神奇性。不同意么?class MyServiceClass { 
  private IMyDao myDao; 
  // 其他东西从这里开始
}  类变量myDao的值没有任何构造体来对它进行初始化,并且它还是私有变量。可是如果你相信它的神奇性的话,你就能使用它了。知道为什么嘛?多找一找,就能在项目中发现在一个向导配置文件中已经注入了它。什么?  起先,这种解决方案了违背了Java的成员变量可视规则。但是忽略掉这些,也会在实际应用中或者养成一个习惯,那就是忽略一个从来没有初始化的类变量。恕我直言,如此一个提供并且鼓吹违反规则的框架一点都没有价值。  现在,可选择的解决方案就是给这个类变量写一个setter方法,然后再被Spring所使用,但是这样做什么也没有改变,要么你把它变成公有的(允许使用你的API的公共用户来设置你的DAO!),或者把它退回成从来没有初始化的私有变量,我有谈到终态(final)这个词么?:)  Spring声称它是没有这种强制性。什么?现在假设一下,把Spring从你的依赖关系列表里移出去,朋友,你的程序再也没有用了,并且你会突然发现到处都是空指针异常。可是谁又会注入私有类变量?或者是私有的setter方法?这种声明真是可笑。  现在,你是否发生过在配置文件中忘了声明或者书写错了你的beans?那又会发生什么呢?运行异常?什么?我曾认为Jave应用程序写地可是相当的准确。  现在我能听到你说,使用注释!注释解决了你的问题!我可不这么想。像@Required或者@AutoWired这样的注释就像在乞求用户不要删除这个类变量或者属性,并且还不是强制性的,也不被任何检查器所强制要求。记住,我这里是在谈文化...  现在,如果你是一个使用注入式构造体的拥护者,那么我相信你已经弄好了一些事情,并且很有可能你会拒绝我在上面所提到的那些漏洞(包括基于Setters方法注入,私有类变量注入,基于aspects范型注入(至少80%的是Spring Beans所提供的且就在实际中使用))。然后你把你的构架依赖性改成动态的,从来不检查,还把它的位置详细地写在疯狂的XML文件里!好好想想代码的导航性,软件流和依赖性,要使用这种方法,如果没有调试器的帮忙根本就无法追踪。  哦,用JavaConfig会怎么样呢?确实,我不需要Spring去做这些!“new”,你记得“new”这个关键字么?是的,面向对象编程,创建实例。这就是Java编程。相信我,“new”一下是没有害处的,再好好想想,你再也不用依赖任何框架来解决依赖性问题,而是用一种静态检查的,可导航的,可读的,简单的,明了的,优雅的,仔细的,安全的并且漂亮的方式。  最后就是,你需要学习Spring-FU,而不是专为Spring设计使用的任何框架,并且尽管这样你还有可能不会成功(因为框架设计者在定义构架的时候不得不受到Spring设计模式的影响,详例参见Restlet和Jersey)!这让我想到那些...  你真的不需要它哦!
转载原址:http://article.yeeyan.org/view/74655/33928

解决方案 »

  1.   

    楼主是转载的啊~程序是给人们提供方便的,并不是一个死板的,按套路来的东西。Spring的创新就是他提倡的轻量级容器概念,这么多的项目用它做绝对不是因为赶风潮,而是Spring禁受住了考验。他最开始成功就成功于它的思想,为开发提供了便利。
    整篇文章里都是,java是java,框架是框架,模式是模式的说法,一种形而上学的思想。
    人们的需求才是最重要的~
      

  2.   

    出来个批判spring的,顶一下!