精华帖 (6) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-09-25
我提出几点: 1,Spring的使用引入了新的复杂度,这点毋庸置疑(虽然可降低已有复杂度,但是小型项目引入Spring简直是噩梦)。 2,破坏了一些本来不该破坏的结构,比如一个类的完整抽象,现在需要通过看配置文件或Annotation才能完全理解, 3,单个功能的测试必须启动Spring容器。 4,感觉引入了Spring的项目,很难从Spring中脱离出来,我认为Spring对项目的耦合太过紧密,就像一个强有力的皮搋子吸住马桶口不放开。 个人意见,希望大家指点。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-09-25
不是引入了Spring项目,而是架构项目的时候选择了Spring。
Spring是代表一种架构的体系,IOC架构,不像是Struts2或者JSF这样, 想怎么换就怎么换。 单个功能的测试不必启动Spring容器啊,你可以写个公共类来实例化你的类啊,用new 也可以啊,但是有Spring还有必要这样做吗? 使用Annotation是为了简化Spring配置过程。 您是没经历过Spring2.0阶段吧? 知道Spring配置文件有4个XML,每个2000行的情况吗? |
|
返回顶楼 | |
发表时间:2012-09-25
太偏激了LZ 你做过多少项目。。。
|
|
返回顶楼 | |
发表时间: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没有做到简化配置过程,反而让类变得不纯净。 |
|
返回顶楼 | |
发表时间:2012-09-25
楼主,假如没有spring,你提的缺点你认为应该怎么解决?
|
|
返回顶楼 | |
发表时间:2012-09-25
liubey 写道 太偏激了LZ 你做过多少项目。。。
最近面试一个公司,算是国内数一数二的吧,问的全是某某架构的缺点,其中就有Spring,这个题挂了,郁闷,觉得自己修炼还不够啊,对问题看的不全面,希望你能指点我一下。 |
|
返回顶楼 | |
发表时间:2012-09-25
消失的气泡 写道 楼主,假如没有spring,你提的缺点你认为应该怎么解决?
就是没引入Spring时的状态啊。。想一想你的项目没引入Spring的时候是什么样子的,我提的基本都是Spring引入后带来的问题。 还有。。大哥们,我这个帖子是在讨论Spring的缺点有哪些。如果有谁有高见的提一下吧,互相学习学习。。 |
|
返回顶楼 | |
发表时间: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,为什么用一个道理吧。毕竟一个框架发展了这么长时间,单纯的缺陷能完善的都完善了。 |
|
返回顶楼 | |
发表时间:2012-09-25
1,Spring的使用引入了新的复杂度,这点毋庸置疑(虽然可降低已有复杂度,但是小型项目引入Spring简直是噩梦)。
小型项目必需要使用spring吗? 其实也不能论大小来说,当你想要方便地使用某些特性的时候,比如说ioc,切面,声明式事务等等,那就应该用spring,你都需要那么多spring能轻易集成并且串联的功能,为什么还要不使用spring呢?
当然如果项目用不上这些特性,也没说一定要用spring。
这是ioc容器共有的特征,当然,一个好的ide,比如IntelliJ IDEA 在:重构、导航方面,你几乎不会感觉到因为使用ioc而带来的不便。
启动慢了点,不过在编码上用Spring JUnit Runner注解也不会多敲多少代码。
4,感觉引入了Spring的项目,很难从Spring中脱离出来,我认为Spring对项目的耦合太过紧密,就像一个强有力的皮搋子吸住马桶口不放开。
Spring的存在能很大程度上降低项目本身的耦合,但是Spring不同于应用于特定域的框架。 它涵盖了各个方面:mvc, 事务抽象,切面编程,任务抽象,安全框架…… 但是它尽可能程度上做到了每个模块的松散耦合,mvc可以用struts,或者它的Spring mvc,orm框架可以用好多牌子的…… 我想也没有其它的框架做到它那样松散耦合。 至于要替换Spring 本身,会有这样的场景吗?
附:又一个: tools + ioc + mvc + db + aop + tx + html |
|
返回顶楼 | |
发表时间:2012-09-25
为啥小项目引入spring是噩梦呢?你说的是多小的项目?
我觉得小项目用spring作为一个工厂也很好啊。 怎么会破坏抽象结构呢?除非用aop。否则都是接口交互,和spring注入有什么关系。 annotation是把双刃剑,过度使用和不用都不好,这个要自己衡量。 摆脱不了spring是因为spring是个类的工厂,你会再自己写工厂么?那你能摆脱jdk不。不也是工具么。 目前还没感觉有啥可以替代spring的。因为spring包括了创建型设计模式的所有内容 |
|
返回顶楼 | |