论坛首页 Java企业应用论坛

Spring的缺点有哪些,深刻的、不敷衍的。

浏览 28615 次
精华帖 (6) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-25  
    如题,希望大侠们指出,不能用Spring就觉得他什么都好,本帖子意在实际工作中,对是否将Spring引入项目及如何更好的使用Spring提出启发式意见。目前已有高人表达了自己对Spring的不满,让我开始反思,希望大家借此对Spring的不足提出自己的观点(同时也是某牛逼公司的面试题)。
    我提出几点:
    1,Spring的使用引入了新的复杂度,这点毋庸置疑(虽然可降低已有复杂度,但是小型项目引入Spring简直是噩梦)。
    2,破坏了一些本来不该破坏的结构,比如一个类的完整抽象,现在需要通过看配置文件或Annotation才能完全理解,
    3,单个功能的测试必须启动Spring容器。
    4,感觉引入了Spring的项目,很难从Spring中脱离出来,我认为Spring对项目的耦合太过紧密,就像一个强有力的皮搋子吸住马桶口不放开。

个人意见,希望大家指点。
   发表时间:2012-09-25  
不是引入了Spring项目,而是架构项目的时候选择了Spring。
Spring是代表一种架构的体系,IOC架构,不像是Struts2或者JSF这样,
想怎么换就怎么换。

单个功能的测试不必启动Spring容器啊,你可以写个公共类来实例化你的类啊,用new 也可以啊,但是有Spring还有必要这样做吗?

使用Annotation是为了简化Spring配置过程。
您是没经历过Spring2.0阶段吧?
知道Spring配置文件有4个XML,每个2000行的情况吗?
0 请登录后投票
   发表时间:2012-09-25  
太偏激了LZ 你做过多少项目。。。
0 请登录后投票
   发表时间:2012-09-25   最后修改:2012-09-25
谢谢,指教了,我有几点问题(见标红),我想你对Spring还是有一些研究的,希望你能说出Spring的缺点,或者说Spring没有缺点也可以,这样才能对一项技术进行全面掌握。

dacoolbaby 写道
不是引入了Spring项目,而是架构项目的时候选择了Spring。
Spring是代表一种架构的体系,IOC架构,不像是Struts2或者JSF这样,

架构只是对JDK的一种扩展,从这个角度讲,Spring和其他架构没有区别,Struts2提供MVC能力,Spring提供IOC及AOP能力,你觉得呢?

想怎么换就怎么换。

单个功能的测试不必启动Spring容器啊,你可以写个公共类来实例化你的类啊,用new 也可以啊,但是有Spring还有必要这样做吗?

可能项目不太一样吧,我工作中的项目每个功能点都需要测试,Spring这种IOC和AOP的能力让我在测试一个点的时候,还需要考虑到配置文件里的东西,而且又得为了测试单独写配置文件,很奇怪,不知道你有啥高见。

使用Annotation是为了简化Spring配置过程。
您是没经历过Spring2.0阶段吧?
知道Spring配置文件有4个XML,每个2000行的情况吗?

经历过,不过没有2000行的量,分了一些模块,每个模块配置300行吧。我觉得Annotation没有做到简化配置过程,反而让类变得不纯净。



0 请登录后投票
   发表时间:2012-09-25  
楼主,假如没有spring,你提的缺点你认为应该怎么解决?
0 请登录后投票
   发表时间:2012-09-25  
liubey 写道
太偏激了LZ 你做过多少项目。。。


最近面试一个公司,算是国内数一数二的吧,问的全是某某架构的缺点,其中就有Spring,这个题挂了,郁闷,觉得自己修炼还不够啊,对问题看的不全面,希望你能指点我一下。
0 请登录后投票
   发表时间:2012-09-25  
消失的气泡 写道
楼主,假如没有spring,你提的缺点你认为应该怎么解决?


就是没引入Spring时的状态啊。。想一想你的项目没引入Spring的时候是什么样子的,我提的基本都是Spring引入后带来的问题。

还有。。大哥们,我这个帖子是在讨论Spring的缺点有哪些。如果有谁有高见的提一下吧,互相学习学习。。
0 请登录后投票
   发表时间:2012-09-25  
如果脱离了spring,事务用代码处理,无疑增加了很多的代码量,还有spring的MVC用起来也比struts2方便很多,至于测试,启动容器的目的是为了加载datasource吧,因为其他的你都能new出来, Annotation无论在配置spring还是hibernate的时候,都简化了很多的配置,当然你也可以继续用xml。至于什么叫纯净的代码,就没什么说的了,我不认代码里面夹杂着各种xml就纯净了。

好了,说下缺点,也是纯属个人想法,一切优雅的框架,都会造成执行效率的损失。而且增加了一些不确定性,只能认为它应该会执行出正确的结果,复杂多变的应用场景,没人能保证框架一定不会出一些隐含的低级bug,无法完全控制代码的健壮性,毕竟是人写出来的东西。说到这可能有人会反驳了,他一次bug都没碰上,这个时候应该监控一下虚拟机的运行情况,比如web项目在高并发的情况下,是不是频繁的进行GC,为什么会这样,想解决但是无从下手。我再做原来12530的会员接口时候,就碰上这个问题了,后来发现同样的查询压力测试,只用axis+jdbc的情况下,比使用spring+hibernate的平均响应时间低不少,至于怎么判断是否在做GC,就不在这里讨论了,有兴趣可以私聊

还有,让程序员的技术含量越来越低了,spring粘和的不是你的代码,而是思想。见过有的人离开了spirng,连个connection都那不到,更有甚者一年多的工作经验,不知道connection是什么东西,从培训到工作接触的都是框架,老师几句话带过的基础都就饭吃了。几百行有效代码的一个小j2se守护进程都往spring上套。

至于网上说的什么不支持分布式应用,缺少IDE支持之类的,都是应该叫局限性。

感觉公司面试问框架的缺点,就是想了解你使用的情景,以及遇到不尽人意的地方,不是鸡蛋里挑骨头,就好像到底是应该用c3p0还是proxool,为什么用一个道理吧。毕竟一个框架发展了这么长时间,单纯的缺陷能完善的都完善了。
0 请登录后投票
   发表时间:2012-09-25  

    1,Spring的使用引入了新的复杂度,这点毋庸置疑(虽然可降低已有复杂度,但是小型项目引入Spring简直是噩梦)。

 

小型项目必需要使用spring吗? 其实也不能论大小来说,当你想要方便地使用某些特性的时候,比如说ioc,切面,声明式事务等等,那就应该用spring,你都需要那么多spring能轻易集成并且串联的功能,为什么还要不使用spring呢?

 

当然如果项目用不上这些特性,也没说一定要用spring。


    2,破坏了一些本来不该破坏的结构,比如一个类的完整抽象,现在需要通过看配置文件或Annotation才能完全理解,

 

这是ioc容器共有的特征,当然,一个好的ide,比如IntelliJ IDEA 在:重构、导航方面,你几乎不会感觉到因为使用ioc而带来的不便。


    3,单个功能的测试必须启动Spring容器。

 

启动慢了点,不过在编码上用Spring JUnit Runner注解也不会多敲多少代码。

 

    4,感觉引入了Spring的项目,很难从Spring中脱离出来,我认为Spring对项目的耦合太过紧密,就像一个强有力的皮搋子吸住马桶口不放开。

Spring的存在能很大程度上降低项目本身的耦合,但是Spring不同于应用于特定域的框架。 它涵盖了各个方面:mvc, 事务抽象,切面编程,任务抽象,安全框架……  但是它尽可能程度上做到了每个模块的松散耦合,mvc可以用struts,或者它的Spring mvc,orm框架可以用好多牌子的……  我想也没有其它的框架做到它那样松散耦合。

至于要替换Spring 本身,会有这样的场景吗? 

 

附:又一个: tools + ioc + mvc + db + aop + tx + html

http://jodd.org/

0 请登录后投票
   发表时间:2012-09-25  
为啥小项目引入spring是噩梦呢?你说的是多小的项目?
我觉得小项目用spring作为一个工厂也很好啊。
怎么会破坏抽象结构呢?除非用aop。否则都是接口交互,和spring注入有什么关系。
annotation是把双刃剑,过度使用和不用都不好,这个要自己衡量。
摆脱不了spring是因为spring是个类的工厂,你会再自己写工厂么?那你能摆脱jdk不。不也是工具么。

目前还没感觉有啥可以替代spring的。因为spring包括了创建型设计模式的所有内容
0 请登录后投票
论坛首页 Java企业应用版

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