首先Spring 是一个框架,使用Spring并不代表代码质量的提高,就像盖房子选择用上海的地皮还是北京的地皮一样,房子质量与土地所在的城市无关,与房子的具体设计方案和选料有关。
使用Spring 等框架可以简化很多基础性的工作,配置好后可以方便构建业务应用。框架使用多了会有局限的感觉,像小鸟被套在笼子里,无法飞出去,虽然在笼子里面吃喝不愁。目前编程的门槛越来越低,诸多开源框架广泛传播,几乎没有什么技术门槛,会配置就会编程,而一个好的DBA对软件性能会有很大提高,软件的核心逻辑最终会转移到对数据库的操作上,而且对目前从事的工作来讲,感觉技术的瓶颈越来越多的局限在对数据库的操作上,下一步要认真提高下了。Spring的优势不言而喻:  1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。  2. 采用了分层结构,可以增量引入到项目中。  3. 有利于面向接口编程习惯的养成。  4. 目的之一是为了写出易于测试的代码。  5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。  6. 一致的数据访问介面。  6. 一个轻量级的架构解决方案。  对Spring的理解  Spring致力于使用POJOs来构建应用程序。由框架提供应用程序的基础设施,将只含有业务逻辑的POJOs作为组件来管理。从而在应用程序中形成两条相对独立发展的平行线,并且在各自的抽象层面上延长了各自的生命周期。  Spring的工作基础是Ioc。Ioc将创建对象的职责从应用程序代码剥离到了框架中,通常2中注入方式:setter 和 ctor参数。  每个Bean定义被当作一个POJO(通过类名和JavaBean的初始属性或构造方法参数两种方式定义的Bean)。  Spring的核心在org.springframework.beans,更高抽象层面是BeanFactory. BeanFactory是一个非常轻量级的容器。  关于可维护性的思考  Spring之类的技术确实带来了应用系统的可维护性的提高吗?  Ioc, AOP之类的技术,本质上都是将原本位于应用程序代码中"硬编码"逻辑,剥离出来放到了配置文件中(或者其他形式)。主流声音都是认为提高了应用程序的可维护性。  但如果从以下方面观察,结合项目实际经验,个人感觉这些技术的应用大大降低了应用程序的可维护性,尤其是面对一个陌生的系统,或者项目人员变动频繁的时候。  1. 中断了应用程序的逻辑,使代码变得不完整,不直观。此时单从Source无法完全把握应用的所有行为。  2. 将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担。  3. 时光倒退,失去了IDE的支持。在目前IDE功能日益强大的时代,以往代码重构等让人头痛的举动越来越容易。而且IDE还提供了诸多强大的辅助功能,使得编程的门槛降低很多。通常来说,维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。  4. 调试阶段不直观,后期的bug对应阶段,不容易判断问题所在。

解决方案 »

  1.   

    用了spring和struts好长时间,这些框架目的是为了增加系统的可维护性,提高开发效率,但最终发觉都无一例外走向反面。
    1. 增加了学习的时间,因为一个团队不是每个人都懂这些东西,要让每个人都学会需要较长的时间
    2. 配置文件太多太杂太庞大,稍有不慎就出一些编译阶段发现不了的错误,查找十分麻烦
    3. 在jsp+servlet之上包装了一层又一层,导致开发人员稍微底层一点的问题就完蛋,现在的java程序员谁还记得HTTP规范?有的问题,只要在http头写一行代码就解决的问题,面对框架愣是一筹莫展。也许回归jsp+servlet是一个正确的选择。
      

  2.   

    有时候回归jsp+servlet,马上有种轻松自如的感觉,原来事情还是可以这样简单的!
    struts架构太复杂,可以不用,一定不想让页面出现java代码,用jstl也不错
      

  3.   

    用mvc还好,不过,ssh麻烦现在很多都是注解了
      

  4.   

    正在再次看SPRING官方文档,第一次接触SPRING文档时一扫而过,觉得很简单觉得所谓的IOC就是把对象的依赖由硬编码改为XML配置,所谓的AOP就是在方法调用前后增加一层代理JDK自带的代理功能就可以了,可以想到的后面就直接PASS了不怎么学习SPRING了,所以很少用SPRING....像很多人说的,加入日志处理或者权限控制,我更喜欢在硬编码时就体现了现在再次看它时才觉得主要是它的灵活性。IOC只是核心,AOP是基于IOC,事务管理是基于AOP的使用AOP或者事务这些功能的主要目的是为了让业务代码更加简洁,比如日志的记录,权限的控制,事务管理这些本就不是业务流程的功能让其解藕,还是很不错的
      

  5.   

    没有一种适合于所有项目的框架不同项目需求 不同开发规范和要求 就会使用不同的技术和框架spring带来的更多是思想上的升华吧
      

  6.   

    更可怕的是,现在IDE的代码重构功能十分强大,程序员有一种本能的冲动去重构代码,导致配置文件的维护更加简单。
      

  7.   

    打错了!应该是:
    更可怕的是,现在IDE的代码重构功能十分强大,程序员有一种本能的冲动去重构代码,导致配置文件的维护更加复杂。
      

  8.   

    用了SSH的项目,从来没有带来维护的简单和可扩展性的提高,反倒是为了学习这些框架付出了更多的时间成本,到头来维护更加麻烦。谁敢说维护配置文件比维护代码容易的?这个配置文件可不是简单的寥寥三行的数据库配置文件!
      

  9.   

    楼主说的也不是没有道理了,不过,毕竟,ssh的出现也有他的有点的。在我们做项目的过程中,我们也只是,选择最好的解决方案了。不是吗?
      

  10.   


    问题是,有谁真正因为用SSH而提高了系统的开发效率和可维护性?加上学习成本在内
      

  11.   


    写了这么多...一个一个说吧你的房子比喻不太恰当 简单的说 住房子的是你 使用房子的是你 但是盖房子或者拆迁房子甚至于生活中的一些小事(房屋装修,修马桶)不是你应该做的 Spring的作用就是负责管理对象的依存关系以及生命后期 让你在你的房子里享受你的生活的时候不必为了这个房子的任何事情苦恼(房租不算..)..没感觉什么编程门槛低 也没觉得框架随便配置几个文件就能搭建一个应用程序(你说的是grails?还是什么其他的快餐框架..) 那种东西我不知道算不算是框架 我管他叫平台..至于你提出的反驳 我也简单的说下1.单从Source是看不出来这段代码在实际运行中执行的全部操作..那么为啥要单看Source..
    一些通用功能做AOP还是可以理解的 比如事务 但是具体的业务就不要写到AOP里去吧..2.仅仅是通过配置文件管理依赖关系 跟逻辑有啥关系?选择不同的实现类只需要更改下配置文件 比原来改代码更轻松些吧3.关于第二点...我再补充下 有人认为将配置信息分离出来会导致维护成本提高 我感觉这种比喻就是觉得做菜太麻烦 干脆生吃比较轻松.. 分离出来又不是没有好处 比如你在部署之后发觉当前实现有些不妥当 你在这个时候直接可以通过更改配置文件切换到另外一个实现去 而不是更改源代码再编译一次..况且也不一定都得用XMl 你可以用注解嘛..4.没明白调试BUG跟Spring有啥关系
      

  12.   

    同感!楼主说的太对了,spring害死人,用这个框架就是戴着镣铐跳舞。个人也推崇jstl,简单明了。
      

  13.   


    有学那么多配置的时间,用jsp—+servlet早把项目做得更好了。
    至少现在eclipse IDE功能很强,代码逻辑关系,只敲一个功能键就显示清楚了。用框架反而看不出来了
      

  14.   


    你就有点逗了。  
    JSTL 跟 spring 有啥关系?    框架有框架的好处,原生态有原生态的好处。
      

  15.   

    有几个人敢说他能把ssh用好,用精的还是那句,JB不正就别怪B歪
      

  16.   

    还是那句,JB不正就别怪B歪
    说的好
      

  17.   

    学好用精是需要很长时间的,这也是要记入时间成本的。
    何况框架一两年一翻新,等你学好用精,又过时了。
    这就是为什么java程序员总是疲于奔命,C程序员能形成长久技术积累的原因。
      

  18.   

    spring的结局就是下一个EJB。
    当年EJB刚出来的时候,人人言必称EJB,似乎不懂ejb就是菜鸟似的,可是到如今,谁还用这垃圾东东。
    现在很多人学spring,多数是冲声明式事务去的,真正用大量配置来实现java对象的ico,只有白痴才会那样教条。配置文件好维护,还是代码好维护?其实谁都知道代码好维护,说配置文件好维护的人就是装B而已。
      

  19.   

    偶还是喜欢刚学jsp的时候一样,纯jsp。。神马ssh都不会。。JB不正就别怪B歪。。
      

  20.   

    我从未见过哪个项目用spring而提高了可维护性,甚至开发效率也没有提高。
    java企业应用就是被这些一个个框架搞死的。
      

  21.   

    楼主说的有点偏激,何况有的朋友还说有学习的时间早用JSP做完了。我说明一下,你学习Servlet不需要时间么?没听过哪个处女怕疼一辈子不破除的,这本来就是疼一时爽一世的事嘛。当然必须有点过,但确实是,比起SSH带给我们的好处,学习的那点时间算什么。没有哪个程序员一辈子不学习的。
    还有说到程序的健壮性,为什么用配置文件就不好呢?如果我们代码部署在服务器上了,我们就不能再编译了,敢问你怎么改代码,但是我们可以改配置文件啊。
    框架是有一定弊端,但你不能否认它的优势所在。
      

  22.   

    即使用SSH的人恐怕也绕不开学Servlet这一关吧!还没见过谁不学JSP、servlet直奔SSH的。
    理论上改配置文件不需要重新编译部署。但实践中没发现哪个项目的维护工作是不改代码,只靠改配置文件解决的,而且重新编译部署不需要花多少时间。
    其实框架的弊端已经被越来越多的人认识。
      

  23.   

    看过很多别人写的 Spring 代码,没感觉有什么可维护性,缺点倒是有不少,举几个例子:1:为了接口而接口,有事没事就整一个接口。我想大多数人是先写实现类,再提取接口方法的吧?如果这样的话,那接口的存在有何意义?这样的接口有扩展性么?接口一般是在实现之前定义好的,一经定义后,在很长的一个周期内是不允许更改的!如果能做到这一点的话,那接口是有存在价值的,否则一无事处!2:结构层次变得非常复杂,分层过来细致,使得调用层次增多,有些层次中基本上就是些方法的委托调用,这样导致开发效率大大地降低。加之接口的滥用,如果某一逻辑需要更改,势必会造成大量的代码改动!开源产品也适用于这句话:产品做得好,不如广告做得好!比 Struts, Spring, Hiberate 好的开源框架有很多,在这所谓“SSH”框架的年代下,是有多少人能知道呢?
      

  24.   


    河东河西轮流转,EJB 3 之前是重量级的,但是现在轮到 SSH 了,SSH 是越来越重,配置越来越复杂,而 EJB 则是越来越简单,配置是越来越少。
      

  25.   


    其实框架的还有更加严重的后果:导致程序员付出了大量的无效劳动。
    由于框架层出不穷,花样几乎月月翻新。程序员刚学完一个框架,很可能就又过时了,以前的努力全部归零,又要学新的框架。这就是为什么C程序员能够天天进步,形成长久的技术积累;而java程序员却不断地狗熊掰苞谷,掰一个扔一个,十年下来等于一年的积累。现在很多项目已经是纯粹为了框架而框架。
    1. 本来structs的目的是为了摆脱jsp页面上的java代码,但页面上密密麻麻的struts标签多数情况下比java代码还难以维护和理解,还要为formBean、action、service做对应;还要维护那个编译期间根本不可能发现错误的庞大配置文件。个人认为struts实际上已经成为拖慢开发效率的一大拦路虎。
    2. spring也好不到哪里去,看它一天天膨胀的配置文件,哪个程序员不是小心翼翼地改动,生怕改错一小点就导致崩溃。spring MVC的页面标签库比struts还恶心。
      

  26.   

    补充一下。
    多数项目刚开始的时候,往往项目成员对各种框架的掌握程度不一,而项目负责人总要选用统一的框架,结果迫使不懂这个框架的成员学框架,一开始就浪费了大量时间。再由于上面所述的各种原因,开发过程又总是十分缓慢。
    我回顾之前的开发经历,发现一个现象:jsp+servclet的开发效率远远高于SSH,可维护性更高于SSH。
    2003年开发的一个工作流项目,纯jsp+servlet开发,4个月开发完毕,其后多次重构和大的改动,越来越完善。
    而其后的几个SSH做的项目,严重拖延、效率低下,代码臃肿不堪,几乎把程序员折磨疯了。
      

  27.   


    java开源框架的出现也许本来就是一种错误,对java企业应用的开发造成了致命的伤害。
    同时用过.net和java的人都知道,java框架的可怕
      

  28.   

    有谁真正因为用SSH而提高了系统的开发效率和可维护性
      

  29.   


    看国外sourcecode论坛上 ,对ssh的质疑声不断。而国内却一片崇拜声音,生怕提出质疑被人讥笑。
    其原因无他,几千年来的传统。
      

  30.   

    ...看来我被无视是惯性的..学一个框架不难 难的是熟练使用一个框架 我不提倡盲目用什么SSH(也不知道谁起的破名)
    存在既有意义 你光看缺点不看不看产生缺点的原因我也没什么办法 我试图跟别人解释在页面用标签的好处 他最后就坚持住"我用服务端脚本也能完成"这个理由跟我死磕 我跟别人讲用Spring的好处 居然又出现了"用起来太麻烦"的理由 做了什么事情肯定有后果 不要总是看着坏的后果 
    当然 我也不赞成盲目的去用什么框架 至少在用之前需要明白自己为什么这么用
    就像19L说的 
      

  31.   

    我觉得,SSH中,struts这种东西是最好用的,也最适用的,用起来也简单,完全符合MVC思想;hibernate这种东西,中小系统可以用用,数据关系不很复杂,数据量百万级以下可以用用;Spring这种东西吧,关系复杂,兼容性要求高的用用。中小系统或是专业系统还是不要用了吧。jsp + servlet肯定不是最好的,至少开发效率低了不少。
    对我来说有struts就够了,spring从来没用过。求指正!
      

  32.   

    hibernate还算有其合理性,spring纯属垃圾。
      

  33.   


    代码错了,有IDE给你指出来。配置文件里的类名和方法名拼写错了,谁会告诉你?
    再者,用重构功能改动类名和方法名的时候,你就知道spring的配置文件有多恶心了
      

  34.   

    我真不明白 你的意思是用Spring如果中途出错了程序P都不放一个?你不会看异常啊?那么明显的异常还看不懂啊?重构改动类名和方法名 重构啊 大哥!你不用Spring就什么都不用改啊!?
      

  35.   


    到底是代码编写阶段就知道错在哪方便,还是在运行时出错,再去分析log文件费尽功夫找到错误方便?
    我不用spring,重构的时候,自动把相关引用都改过来了。用了spring却无法自动更改了,只能手工更改,增加了错误的概率
      

  36.   

    不用分析日志啊 施主 你至少用下Spring再说他好坏行么 Spring只管理类与类之间的依赖关系 代码实现出错了 还是跟以前一样调试 如果依赖错误的话 在启动的时候就会提示你的
    你所谓的自动把相关引用都改过来了是咋改的?就改一个字?
      

  37.   

    我改动类的名称,你能让spring配置文件里的类名跟着变吗?
      

  38.   

    spring 的mvc 你们谁用过 好用不?
      

  39.   

    不能 真的对不起 Spring弱爆了 啥都干不了 真是抱歉 我错了 我不该生下来 生下来我也不该做软件行业 错了
      

  40.   

    它的标签库比struts还难用,spring越来越恶心了,啥都插一脚。
      

  41.   

    现实中,程序员都在抱怨spring的配置文件,没有谁喜欢这个东东。
      

  42.   

    存在即合理。存在肯定有存在的价值,使用的时候是看项目适用不适用!很小的系统我们完全可以jsp+servlet+jdbc。很大的系统你这么写会封掉。银行的系统肯定需要框架来分层,业务庞大,使用了框架规范后开发人员也可以有标准。
      

  43.   

    SSH很实用、虽然在性能上有一点点的缺陷,但也在可接受范围之内。SSH帮我们省了很多时间很多事、开发人员不需要自己编码去实现一整套的MVC模式。对于后期的维护、扩展都非常的简便。Spring配置都是死的,可以照搬的、稍微改下就可以了。又不用每次都是自己全敲。Spring是IOC和AOP。IOC就是将类与类之间的依赖关系写在配置文件中,降低类与类之间的耦合度,将这就不是像关在笼子里。而是将笼子打开了。
      

  44.   

    对于低吞吐量的小系统,执行效率要求不高的系统,频繁改动功能并重新部署的系统,
    用SSH,在有比较好的设计的前提下,还是挺有效率的。高吞吐量,多服务器,高并发的大系统,用SSH框架那是找死呢。
      

  45.   

    可以不用struts的,自己整合框架么。
      

  46.   

    现在的招聘中,遇到很多工作3,4年的程序员连个HTTP请求都分析不清楚,都不知道怎么调试,真是悲哀!
      

  47.   

    现在的程序员都被框架重重包围,哪里还知道http协议的内容?
      

  48.   

    你以为你质疑了你就NB了,你的眼光就是国际顶尖高手的水准了!老子最见不得就是拿国籍,籍贯说事。。有个标准吗,国外都比国内的nb吗,你是国内的第一吗?ssh仁者见仁,智者见智,适合的就是最好的!做开发的,麻烦你思维稍微严谨一点好不???????????
      

  49.   

    起码我见过的项目,没有一个因为用了spring就提高可维护性的,连提高开发效率都难以做到。
    你那么推崇这个框架,你敢说心里话你用这个东西提高了开发效率吗?提高了可维护性了吗?
    至于strus标签库,连struts开发小组都不赞成了,国内一些装B公司还要它当成页面规范。
      

  50.   

    看了楼主的这些话让人感觉真的很无语,已经不是技术框架的问题了,我觉得你应该解决一下你的心理问题,你过于偏激了。你出生有你的意义,但同时一定会给家庭带来负担,有利即有弊。事物的好坏要整体和全面的分析,要看这个事物是否适合周围环境。还有就是希望你批评一个框架之前,先把他的优点和适用环境弄清楚。最后,框架只是个工具,就像IDE一样是帮助你工作的,这些一定会有学习的时间成本,难道因为这个你连IDE也不用了。如果现在的大型项目,你能用记事本做出来,那我这里说的话你就当是放屁!
      

  51.   

    反正从项目实践看,spring框架使用后的开发周期更长,代码更难维护,更可耻的是调试更加困难,出了点小毛病东找西找好几天解决不了,远不如jsp+servlet单刀直入一下就定位错误来得快。 隐约感到框架已经进入了误区了。