`

Spring--也许正成为一个EJB

阅读更多
我在想,如果我开始的时候,换个名字,比如说“Spring被严重滥用”或者是“大家使用Spring时,经常误解了面对接口编程这个概念”,可能会更容易理解一些,可能有些争吵就是不必要的了。应该算是我的失误,虽然本意并非标题党,但还有给人这种感觉。在此说声抱歉了。

最后算是总结一下吧(包括我自己一开始要表达的内容,以及中间想到的一些内容):
  • 我不是什么技术牛人,也从来不敢说自己在哪方面有所擅长,所以我讨论问题的时候,很少用绝对来肯定或者否定某些内容或者观点,因为我的角度永远只是片面的。很多支持Spring的人,因为他们可能用得非常正确,也的确简化了他们的工作,自然是认可的。而反对Spring的人,可能是没有用好,或者用得场合不正确,所以也就反对了。所以支持者和反对者之间并不见得有什么矛盾,更不必言语上有太多的相互冒犯。将自己的立场和场景讲清楚,可能会更好。
  • 我从来没有说过Spring没有用,也没有建议大家不用Spring,我只是强调在使用Spring的时候,多多思考,不要教条化。事实上,对于事务,Proxy,还有很多助手类,我也很喜欢用。我对Spring提出的问题在于,它的IOC方式太容易被滥用,当然是否有更好的方案,我也不确认。但这并不妨碍我提出问题。我也说了IOC有很多种方式,Spring的只是一种,大家可以跳出去看一下,学习一些新东西,绝非坏事。
  • 主要问题在人,而不一定是技术,Spring也好,EJB也好,都有自己的场合。高手可以用很简单的架构解决很复杂的问题,同样给低手一个再好的架构,也能做烂一个项目。但是Spring在宣传,或者设计上容易让别人误用(也可能是大量不严谨的例子引起的,我经常回头看自己写的一些东西,也会发现当时只是就问题谈问题,给出了一些例子,还是容易误导的)。所以我也一直强调,不能不分场合的滥用,如果这样,那么不管Spring,还是EJB,都存在问题。
  • 面向接口编程这个问题,也没有必要细讨论,提出来,供大家参考就OK了。
  • 至于我提到的这些问题,都是可以解决的,这个我是同意的,我也提了一些思路,如Spring更合适做模块,模块间可以通过其它的方式来交互,又或者模块间的Spring Context和模块内的Spring Context相互隔离。当然更希望大家能有更好的建议。
  • 再加一句,我只希望做技术的人,在使用框架的时候,都有自己的思考,不仅仅是怎么完成工作,更想知道为什么这样做,还有没有更好的方式。我也理解,在中国,深入做技术的确很难,不管是工作压力,强度,还是整个社会,但是有些事情总还是可以考虑的吧。


以下是原来的内容:
引用
本来想注册一个马甲来写这个帖子的,因为估计自己会被骂得很惨。
但是想想还是认了吧。
说个额外的话,大家如果分别看一下支持和反对者说话的语气,就会觉得蛮好玩的。

我不善于写长文章,就简单的说一下自己的看法吧:
  • 依赖注入并不是不好,但Spring的依赖注入并不是很好,因为他要强迫很多人员了解别人的东西(你现在要用别人的一个接口,需要配置Spring,那么你必然要找到该接口的实现类,甚至是多个实现类,需要了解别人内部的东西,这叫解耦吗),特别是开发人员水平不高的情况下,基本上就是为了注入而注入,为了接口而接口。
  • Spring更合适在模块内部使用,但现在大部分开发人员都做不到模块化设计,而Spring大量的配置文件,将相关内容全局化了,进一步破坏了模块化设计的可能。
  • Spring的配置文件太多,而且基本上现在web开发中,都是全局化的,再加上autowire,维护难度远远大于代码。
  • 减少了静态编译的机制,增加了不必要的错误。
  • 占个位,慢慢补充。

当然有人说,是很多人没有用来Spring,事实上,EJB也是这样,不是EJB不好,而是EJB没有被用好。
就好象API的设计,如果你设计了一个API,却很容易让人误用(或者是进行了错误的宣传),那么责任是使用者还是开发者呢?

大概在7年前,我就不太认同Spring,当然Spring不会因为我的不认同而停止,7年后,情况似乎更严重了。
当时我在CSDN上写的一个Blog: http://blog.csdn.net/wl_95421
我现在仍然想问一个问题:配置文件真的比代码更容易维护吗?

另外说一句,我反对Spring的思路,但是也会用到Spring的一些功能包,比如Jndi的封装等。

估计很多人不同意我的意见,不过希望大家静心讨论一下。

另外说一句,“面向接口编程”,这话里的接口不是java的interface,如果真正翻译一下,应该是“面向抽象编程”,也就是说,将功能抽象出来,然后通过对外的内容提供功能,至于对外的内容是interface,还是class,要看具体的情况。
不是说我写了一个接口,再写一个实现类,就变成“面向接口编程”。
所以也提醒大家注意,回头看一下自己的代码,是否真地对自己的功能进行抽象了,如果说从interface中看出了非常具体的功能,那么这个interface其实就没有什么意义。


我来回答一下问题吧:

引用
Spring完全没有强制你如何写代码

是否强制,这个很难说。仍然是那个建议,java.util.ServiceLoader和Spring两种注入方式,哪种更容易误用呢?一个框架多少都会对使用者施加一定的影响,说没有强制是不大可能的。
问题不在于强制于否,而是在接受的同时,要有自己的思考。
比如说,这种问题Spring有一种解决方式,那么有没有别的方式,思考之后,觉得没有,OK,继续用Spring,如果有,尝试用一下别的内容,也学到了东西,有什么不好呢?但现在这种情况不太普遍吧。

引用
也没看出来你有啥有建设性的建议

我提一个建议,不一定说好,供参考。
将一个大项目分成多个模块项目,模块项目间不使用Spring组装,每个模块都自己清楚的对外功能入口。然后模块内部的Spring文件对外屏蔽,不要外部修改。这样外部使用一个模块的时候,无须去了解Spring文件,而且每个模块内部使用一个相应的ApplicationContext,不会项目所有的模块共享一个Context,可以适当地减少混乱。
当然Spring-DM也有这部分思想的体现,只不过它当时更多是为OSGi来做。
又说到老的话题,Spring也有很多好东西,但好东西往往没有被用好,反而是被用烂了。

引用
如果without spring,你有更好的方案吗?没有,那就接着用吧。

引用
难道兄弟你有更高明的方案?如果没有,请不要乱说!

这句话其实没有意义,每个技术都有适用的场景,有些场景下用Spring也是合适的,但是我看到的情况都是在滥用。为一个功能写一个接口和一个实现类,然后就认为是面向接口编程。这种思路怎么来的,真正用的好吗?我是比较怀疑的。
如果说到方案,只能具体化,打个比方,JDK的ServiceLocator也是非常强大,同时也很简单的。用他同样可以解决很多问题,NetBeans的Lookup也很简单,同样支持了NetBeans。


引用
多么令人蛋疼的观点,发言要靠事实依据,你有证据证明ejb是因为没有被用好才淘汰的吗

EJB一开始就主要目的是为了分布式功能来做的,在当时是没有什么问题的。但在当时有多少项目需要用到EJB呢,很少,但大家提到分布式,就觉得是EJB,本来就是误用。那时候,几乎是言必谈EJB和分布式。
EJB没有被完全淘汰,有很多场合还是用得不错,这些例子我就不用举了吧,只不过90%的情况下是被误用的。

引用
我没投新手,也没投隐藏。但我是为spring叫好的人。你怎么就那么确定为spring叫好的就一定是新手?你怎么就知道人家没有对历史比较?

我不知道为什么说Spring不好,就有人说我水平差,我是混过来的,没有经验装经验,有逻辑关系吗?
就算上面是真的,我一定是年轻人吗?无语的逻辑。

引用
真的不知道你是怎么混过来的。估计也是没什么经验的装有经验吧,我真的很气愤你们这些人,本来没经验就不要装。好像自己其实什么都懂的样子。年轻人不要太浮躁。

我对这话也比较无语了,我虽然不是什么大牛,但代码方面应该也不算太差了。
另外我33岁,不算年轻人了。

引用
个人看JSP真的应该要淘汰了,JSF才是下一个J2EE的领主。让J2EE开发变的更加快捷和高效

至于JSF,我不是特别了解,不好评价。但我也不认为它会是下一个J2EE的领主。

引用
小弟经验不高。但是我想说。天底下没有完美的程序,是程序就有BUG。所以至于任何框架都有 有点,缺点,没有什么淘汰之类的说法。

问题是目前看过来,Spring基本是被滥用,书上给出的例子都往往比较教条,大家照抄,结果不用说了。
当然淘汰这个词用得不是很合适吧,每种技术都有场景,就象cobol多年来还是在用。


引用
占位,我觉得spring挺好的,能解决掉我们开发中的很多问题,减化我们的工作量。我们只用它的core部分就行了,其它你可以不用。如果without spring,你有更好的方案吗?没有,那就接着用吧。

我没有说用还是不用Spring的问题,我只是说Spring现在被严重误用,快成了第二个EJB了。

引用
没办法火了 这种人太恶心了,贬低别人抬高自己,不懂技术非要装懂。如果他真有本事 你就别用Spring

评价一个东西的好坏,和用不用这个东西没有必然联系吧。
我一直在强调误用才是最根本的问题,不是说用不用的问题。

引用
乍一看标题,正想一笑了之,忍不住好奇点开帖子,盼着或有什么惊人之论,也未可知。进来看后大失所望。不是说spring不能被批评,只是楼主通篇除了无病呻吟,实在毫无深度,乏善可陈。不过倒是符合JE评良好无好贴的一贯作风。

无病呻吟不敢苟同,我已经在里面提出了问题,Spring的误用,带来了不必要的复杂度,而且目前很多项目中的设计就是为了接口而接口,我觉得这种情况很严重,而且很多人把IOC等同于Spring的注入,事实上还有很多更好的注入方式,如ServiceLocator(Tuscany基于它实现的,应该不算小项目了吧),NetBeans的Lookup也不用说了。
至于很多人说让我给出一个更好的方案,我的确是没有办法。小项目有小项目的做法,大的有大的,产品型的和普通项目也有区别,怎么可能有一个放之四海而皆准的方案。但现在很多人都认为Spring就是,这才是我想说明的问题。
说实话,我也没有想过去说服别人,只不过正好和一个朋友聊天说到Spring,所以发了这个帖子。
不过结果倒是在我的意料之中。
分享到:
评论
219 楼 smartinvoke 2011-04-18  
咖啡豆子 写道
pengpeng99bill 写道
axeon 写道
楼主的观点是正确的,但是你注定要被投新手和隐藏。
为spring叫好的,才真的是新手,不单单对java的历史没有比较,很多在开发语言层面上也没有比较。刚入行就做java,直接就做spring。
你若真的让他用别的语言写个东西,立刻六神无主,如若让他不用spring写java的东西,他也同样六神无主。
这姑且也算是斯德哥尔摩综合征之一吧!

楼主被投新手和隐藏的原因是新手的基数还真的很大,而且很爱发言。

ejb我算是国内第一批用的,做了几个大项目,平心而论,不是那么好用,也不是那么难用。
spring也是国内第一批用的,其实本质上和ejb差不多,一个解决了A问题,带来了B问题,一个解决了B问题,带来了C问题。

但是,我就弄不明白了,spring难道是你亲爹,那么维护着?


你说你用spring做过大项目,我怎么看不出来啊,JAVA里面吹牛逼的真多,如果你真的用过spring做过大项目,我相信你就不会说了,没有spring的IOC你的维护会叫你死掉,没有IOC你的代码改动会叫你改一处动全身。而且spring已经不仅仅是IOC他集成了所有框架和技术优势,把他们又简单话,所以业务上的扩展非常容易。这就是spring本身的目标80%的代码。JAVA里面向你这样滥竽充数的太多了,没办法因为JAVA的Hellworld太简单了而且JAVA本身代码有不复杂,不像C会涉及到指针涉及到硬件,所以今天的所谓的JAVA人太多了。我带的Team里面就有很多,从他们的逻辑思想上就能看出来。嗨不想骂你算了,年轻人别太浮躁,要真想学好JAVA多研究研究JAVA的各种框架吧,只有你真正的会使用各种框架了,你才能到架构师的方向。算了不说太多了

这.........

这人也就是个码奴(代码奴隶,被框架驾驭的家伙)而已...
218 楼 idle_sun 2011-04-18  
套用spring in action 中的一句话
spring从业就没有想代替成为ejb,只不过是ejb的很多技术针对开发人员不友好,spring的目标就是磨平这个粗糙的棱角。

还有就是我不知道大家为什么要喷ejb? 仅仅是因为ejb2对大家的印象不好?
我学的东西不多, 但是就我所知。 能有第二个能够像ejb一样提供完整的(分布式)企业级技术方案? 当初第一次看ejb的技术规范时,就热血沸腾(现在也是)
虽然在现用的不多, 特别是国内。 那是因为没有太多复杂到足够使用EJB所有技术的项目。

接刚才说的。 spring的目标就是磨平EJB的粗糙的棱角。  这势必造成spring会集成更多的ejb技术。 不可能说spring集成jms就叫好。spring集成jta就咒骂?

还有就是,spring就核心的ioc和aop并不是说在集成了其它技术就不能用了。  你要不喜欢, 也不可以使用spring提供的封装, 只使用aop与ioc也是可行的啊
217 楼 pengpeng99bill 2011-04-17  
我敢说就现在的spring来说,就算他要求负费使用也会有N多公司来使用的,所以可见其强大之处
216 楼 pengpeng99bill 2011-04-17  
yangxinxyx 写道
EJB,至今为止没有被淘汰的说法,它依然是那么强大,只是唯一的区别是它并不是那么轻量级,但是它有太多太多企业级的功能,但往往很多项目只会用到其中的一种或几种,所以要去寻求一种轻量级的框架来解决这些问题,这才出现了Spring,而Spring在慢慢的发展中,也不断的整合了过多的功能,而可不可说,Spring在向EJB方向发展喃?

个人认为spring的发展已经不仅仅局限与对EJB的追捧了,而是超越了他比他做的更好了。只不过对于EJB来说,他更加适合商业公司的封装而拿出去买钱,其实这些都是商人的把戏罢了。
215 楼 pengpeng99bill 2011-04-16  
<div class="quote_title">liukai 写道</div>
<div class="quote_div">
<div class="quote_title">skzr.org 写道</div>
<div class="quote_div">
<p> </p>
<h1 id="A.2BkAli6Q-Spring" style="font-family: sans-serif;"><span style="color: #ff0000; font-size: large;">与其说Spring正在成长为一个EJB,不如承认Spring正在成熟,Spring的生态环境已经是一个小地球了</span></h1>
<h1 style="font-family: sans-serif; font-size: 16px;">选择Spring</h1>
<ul style="font-family: sans-serif; font-size: 16px;">
<li>项目技术体系:HTML+JSP+REST+MVC+JDBC</li>
<li>看好spring mvc的速度+spring生态环境的欣欣向荣</li>
<li>Spring生态:从安全到各种服务集成具有天生的优势</li>
<li>Spring对REST的支持</li>
<li>MVC测试:<ol type="1">
<li>tomcat maxThread=10;使用ab -n 10000 -c 20 测试一个helloworld control!</li>
<li>spring3 mvc访问jsp速度高达5、6K/s</li>
<li>spring3 mvc采用freemarker速度高达5、6K/s</li>
<li>struts2(关闭log,关闭开发模式) mvc最高还达不到2K/s</li>
</ol>
</li>
</ul>
</div>
<p>顶下哈</p>
<p>实际上SpringSource围绕Spring已经开发了很多组件.可以说有一整套解决方案.</p>
<p>如Springsecurity,spring roo,spring batch以及很多我所不知道的套件.</p>
<p>甚至还包括了tc server,Grails,和STS等</p>
<p> </p>
<p>对于这点很多人极度BS,认为Spring越来越臃肿,很多套件纯属打酱油用的.</p>
<p>对于这个观点我前半部分我保留意见,后半部分我坚决支持~</p>
<p> </p>
<p>但我们要认识到,围绕Spring而产生的众多周边套件反而证实了Spring这个框架本身的强大.</p>
<p>Spring3的好处很多,在此不一一多说了.</p>
<p> </p>
<p>但我可以大胆预言下.</p>
<p>SpringMVC以后将会成为java web开发事实上的标准.在web层将会和现在hibernate的地位一样.</p>
<p> </p>
<p> </p>
<p>未来两三年后,从全球范围来看,新项目的用Spring3MVC的应该要多于struts2.</p>
<p>其实网上关于Spring3的资料已经有大把了.</p>
<p>比如在stack overflow中搜索struts 相关的资料有1024条信息</p>
<p>而搜索 spring mvc 却高达 4108条信息!!</p>
<p>这说明在国外SpringMVC已经取代struts成为新的web层标准了.</p>
<p> </p>
<p>因为SSH的原因,struts在中国可能还有几年的高流行度.</p>
<p>但是如果struts没有进一步的发展,被Spring 淘汰是必然的.</p>
<p> </p>
<p> </p>
</div>
<p>spring是越来越臃肿了,但是他是模块化的,而并不是要求你用一个就必须都要用,当初EJB2就是要求必须全用,所以才有这个问题,JAVA本来在硬件和技术深度上就要求不多,那么如何验证你的JAVA能力呢,其实就是要求你尽量的掌握多方面的技术,而不是一个简单的Helloworld,技术的发展本来就是越来越庞大了。这个跟spring没关系,而spring的臃肿正是跟上了时代的进步,所以才是有发展的,至于你们认为的spring越来越复杂了,那是因为你们没有跟上时代的变化,而在抱怨别人不要变化,这个只会自欺其人。个人认为springMVC是比较好用也看中比struts好,但是下一带的MVC不是springMVC而可能是spring现在在推导的spring webflow,以及Oracle其实也在提倡的JSF。他们使得VIEW的开发更加便利更加有效率了。</p>
<p> </p>
214 楼 Irving_wei 2011-04-16  
能在运用技术的过程中,看到这么多。觉得LZ真是个用心的人。而且没有丝毫尖刻的言语和过激的情绪,一切从容自如,佩服。如有幸,真想认识认识。
213 楼 kjj 2011-04-16  
发这种帖子的人的心态基本处于,不满现实,又无力改造现实,就只好埋怨现实为啥不尽如人意了,当作娱乐玩玩还行...........
212 楼 yangxinxyx 2011-04-16  
EJB,至今为止没有被淘汰的说法,它依然是那么强大,只是唯一的区别是它并不是那么轻量级,但是它有太多太多企业级的功能,但往往很多项目只会用到其中的一种或几种,所以要去寻求一种轻量级的框架来解决这些问题,这才出现了Spring,而Spring在慢慢的发展中,也不断的整合了过多的功能,而可不可说,Spring在向EJB方向发展喃?
211 楼 greatrobert 2011-04-16  
楼主说的几个问题,其实并不都是问题,为了接口而接口我记得我最初用spring的时候是因为事务管理默认使用的是jdk的代理,而jdk代理是只支持基于接口的,这点属于是jdk的问题,而后来才发现cglib或者javassist可以基于类做代理的。
模块化设计只要基础搭建的好也是可以实现的,减少了静态编译的机制,增加了不必要的错误,使用myeclipse或者spirng ide还是可以解决的。

配置文件比较多这个确实是个比较麻烦的问题,而且spring现在越做越大,大有脱离java的趋势,一个项目越做越大离被抛弃已经不远了。
210 楼 liukai 2011-04-16  
<div class="quote_title">skzr.org 写道</div>
<div class="quote_div">
<p> </p>
<h1 id="A.2BkAli6Q-Spring" style="font-family: sans-serif;"><span style="color: #ff0000; font-size: large;">与其说Spring正在成长为一个EJB,不如承认Spring正在成熟,Spring的生态环境已经是一个小地球了</span></h1>
<h1 style="font-family: sans-serif; font-size: 16px;">选择Spring</h1>
<ul style="font-family: sans-serif; font-size: 16px;">
<li>项目技术体系:HTML+JSP+REST+MVC+JDBC</li>
<li>看好spring mvc的速度+spring生态环境的欣欣向荣</li>
<li>Spring生态:从安全到各种服务集成具有天生的优势</li>
<li>Spring对REST的支持</li>
<li>MVC测试:<ol type="1">
<li>tomcat maxThread=10;使用ab -n 10000 -c 20 测试一个helloworld control!</li>
<li>spring3 mvc访问jsp速度高达5、6K/s</li>
<li>spring3 mvc采用freemarker速度高达5、6K/s</li>
<li>struts2(关闭log,关闭开发模式) mvc最高还达不到2K/s</li>
</ol>
</li>
</ul>
</div>
<p>顶下哈</p>
<p>实际上SpringSource围绕Spring已经开发了很多组件.可以说有一整套解决方案.</p>
<p>如Springsecurity,spring roo,spring batch以及很多我所不知道的套件.</p>
<p>甚至还包括了tc server,Grails,和STS等</p>
<p> </p>
<p>对于这点很多人极度BS,认为Spring越来越臃肿,很多套件纯属打酱油用的.</p>
<p>对于这个观点我前半部分我保留意见,后半部分我坚决支持~</p>
<p> </p>
<p>但我们要认识到,围绕Spring而产生的众多周边套件反而证实了Spring这个框架本身的强大.</p>
<p>Spring3的好处很多,在此不一一多说了.</p>
<p> </p>
<p>但我可以大胆预言下.</p>
<p>SpringMVC以后将会成为java web开发事实上的标准.在web层将会和现在hibernate的地位一样.</p>
<p> </p>
<p> </p>
<p>未来两三年后,从全球范围来看,新项目的用Spring3MVC的应该要多于struts2.</p>
<p>其实网上关于Spring3的资料已经有大把了.</p>
<p>比如在stack overflow中搜索struts 相关的资料有1024条信息</p>
<p>而搜索 spring mvc 却高达 4108条信息!!</p>
<p>这说明在国外SpringMVC已经取代struts成为新的web层标准了.</p>
<p> </p>
<p>因为SSH的原因,struts在中国可能还有几年的高流行度.</p>
<p>但是如果struts没有进一步的发展,被Spring 淘汰是必然的.</p>
<p> </p>
<p> </p>
209 楼 skzr.org 2011-04-15  
<p>
</p>
<h1 id="A.2BkAli6Q-Spring" style="font-family: sans-serif;"><span style="color: #ff0000; font-size: large;">与其说Spring正在成长为一个EJB,不如承认Spring正在成熟,Spring的生态环境已经是一个小地球了</span></h1>
<h1 style="font-family: sans-serif; font-size: 16px;">选择Spring</h1>
<span style="font-family: sans-serif; font-size: 16px;"></span>
<ul style="font-family: sans-serif; font-size: 16px;">
<li>项目技术体系:HTML+JSP+REST+MVC+JDBC</li>
<li>看好spring mvc的速度+spring生态环境的欣欣向荣</li>
<li>Spring生态:从安全到各种服务集成具有天生的优势</li>
<li>Spring对REST的支持</li>
<li>MVC测试:<ol type="1">
<li>tomcat maxThread=10;使用ab -n 10000 -c 20 测试一个helloworld control!</li>
<li>spring3 mvc访问jsp速度高达5、6K/s</li>
<li>spring3 mvc采用freemarker速度高达5、6K/s</li>
<li>struts2(关闭log,关闭开发模式) mvc最高还达不到2K/s</li>
</ol>
</li>
</ul>
208 楼 ctoeye 2011-04-15  
一帮无聊的人,吵什么吵。就像原来有人喜欢青山菜菜,后来我喜欢苍井空,你非要说苍井空不好,你说你喜欢87年的麻美由真或者88,89年的XXX。好吧。你们就吵吧。
207 楼 wl95421 2011-04-15  
楼上的,我也无语了。
首先这个东西,早在Spring之前就出现了,只不过Sun一直没有公开,所以才少为人知。
另外,如果你觉得这个东西小,那么Tuscany可以基于它来完成整个的架构。同样NetBeans的Lookup也少得可怜,功能很强。

至于要不要修改META-INF/services,我更觉得无语了,为什么要修改啊。
给个实际的例子吧。比如说我现在有一个模型,要输出为指定的格式。
写一个IExporter接口,然后除了export方法以外,再加一个isAcceptable方法和一个getPriority方法,就可以通过这种方法很灵活地加载自己需要的实现类。

这种需求下,是Spring灵活还是ServiceLoader呢?

我不是说ServiceLoader比Spring好,我始终只是在说,Spring现在被严重误用。
大家多思考一下,看一些外面的东西,有什么不好。
206 楼 kjj 2011-04-15  
引用

我有没有提出来建议吗? 我说Tuscany用JDK的ServiceLoader来支持自身的架构,有兴趣的朋友可以去看一下,那种方式不见得比Spring的配置差。
有兴趣的朋友去看一下NetBeans的Lookup,也能学到很多东西。
我已经提出来了,但有几位去看了呢?只是在质疑我?
很多人根本就没有去看过我说的这些东西,没有了解更多的内容,就是在质疑。

另外“面向接口”这个说法被误解了,我也在主贴中给出了说明,虽然不什么建设性的建议,也至少表明了自己的观点吧。然后说Spring被滥用,有误导倾向。

难道我一定要给出一个方案,才算是有建设性的建议吗?




你说的这个ServiceLoader 你这么一说我还真去Google了一下
一下摘自IBM的一片文章
引用

2. ServiceLoader

Java 开发人员经常希望将使用和创建组件的内容区分开来。这通常是通过创建一个描述组件动作的接口,并使用某种中介创建组件实例来完成的。很多开发人员使用 Spring 框架来完成,但还有其他的方法,它比 Spring 容器更轻量级。

java.util 的 ServiceLoader 类能读取隐藏在 JAR 文件中的配置文件,并找到接口的实现,然后使这些实现成为可选择的列表。例如,如果您需要一个私仆(personal-servant)组件来完成任务,您可以使用清单 2 中的代码来实现:


清单 2. IPersonalServant

public interface IPersonalServant
{
    // Process a file of commands to the servant
    public void process(java.io.File f)
        throws java.io.IOException;
    public boolean can(String command);
}


can() 方法可让您确定所提供的私仆实现是否满足需求。清单 3 中的 ServiceLoader 的 IPersonalServant 列表基本上满足需求:


清单 3. IPersonalServant 行吗?

import java.io.*;
import java.util.*;

public class Servant
{
    public static void main(String[] args)
        throws IOException
    {
        ServiceLoader<IPersonalServant> servantLoader =
            ServiceLoader.load(IPersonalServant.class);

        IPersonalServant i = null;
        for (IPersonalServant ii : servantLoader)
            if (ii.can("fetch tea"))
                i = ii;

        if (i == null)
            throw new IllegalArgumentException("No suitable servant found");
       
        for (String arg : args)
        {
            i.process(new File(arg));
        }
    }
}


假设有此接口的实现,如清单 4:


清单 4. Jeeves 实现了 IPersonalServant

import java.io.*;

public class Jeeves
    implements IPersonalServant
{
    public void process(File f)
    {
        System.out.println("Very good, sir.");
    }
    public boolean can(String cmd)
    {
        if (cmd.equals("fetch tea"))
            return true;
        else
            return false;
    }
}


剩下的就是配置包含实现的 JAR 文件,让 ServiceLoader 能识别 — 这可能会非常棘手。JDK 想要 JAR 文件有一个 META-INF/services 目录,它包含一个文本文件,其文件名与接口类名完全匹配 — 本例中是 META-INF/services/IPersonalServant。接口类名的内容是实现的名称,每行一个,如清单 5:


清单 5. META-INF/services/IPersonalServant

Jeeves   # comments are OK




然后在JDK的doc里看到这个字样

引用

Since:
1.6


我被你的"单纯"震精了,话说,spring那一年出现的,那时jdk1.6 ,哦,连jdk1.5也都还没有怀胎

这个ServiceLoader 只实现了spring其中小小一部分的内容,你就拿来说这是建设性的意见

你确定你不是开玩笑,你叫程序员每次都去改那个叫META-INF/services 的东西,是木是,

里确定你了解spring目前的地位,和作用,

共产主义是 marks 提出来的,可是 marks 流离失所,还要列宁包装成社会主义才能鼓动人

所以我说你适合鼓动人一点都没错

我承认,回这个帖子,我也是处于无聊.....................

205 楼 dwk126 2011-04-15  
赞同楼主意见!

我就是为了接口而接口那种。。。。
接口中方法都是具体的。。。如果条件变了,要从service改到dao接口和实现类都要改。。。。。
那个烦啊

想请教问楼主和各位前辈如何避免这种滥用情况?
不知道这个问题表达的对不对 呵呵。。。

还请各位请教


204 楼 httpclient_bd 2011-04-15  
spring从2.x时候就该停下来了。 往后就是在画蛇添足。
203 楼 louisgarcia 2011-04-15  
支持LZ,有自己的想法,大胆猜想,而且证实过,中国冷嘲热讽的人多,崇拜权威的人多,有自己思想的少

老师:请谈一下对于其他国家粮食短缺的自己的看法?

美国学生:什么是其他国家?

非洲学生:什么是粮食?

欧洲学生:什么是短缺?

中国学生:什么是自己的看法?
202 楼 jnoee 2011-04-15  
我很期待出现一个without spring,就像当年出现了without ejb一样。
不过一路看来,还没有一个可以without spring的真正理由。
另外有些讨论的人连spring是怎么出现并席卷全球的都不知道。
如果连spring解决了什么问题都没搞清楚,很难想象能提出什么值得一看的观点来。
201 楼 llade 2011-04-15  
插一嘴,spring被用滥的很大一部分原因是很多项目把spring容器只作为一个层面考虑,就好像是一个冰箱,不管好的坏的新鲜的都往里面塞,结果新鲜的和过期的配置堆在了一起,改起来又怕牵一发动全身,结果配置文件越来越大,越来越多,越来越乱。假如把bean引用的拓扑图拿出来,像蜘蛛网一样。spring作为一个冰箱应该层次分明,同等新鲜程度的东西应该放一起,一次IOC注入超过5个以上的相同类型的bean考虑简化,配合Ant,把配置管理部分采用自动化的方式,减少配置时间,把蜘蛛网整理成树形结构才是较好的解决办法。annotation的使用必须制定一些限制原则,以免一些“神秘”“灵异”的事件发生。
200 楼 mtnt2008 2011-04-15  
wl95421 写道
引用
也没看出来你有啥有建设性的建议,最搞笑的是你主贴没啥观点,返回来还大量应用回帖的内容充实你的主贴


我有没有提出来建议吗? 我说Tuscany用JDK的ServiceLoader来支持自身的架构,有兴趣的朋友可以去看一下,那种方式不见得比Spring的配置差。
有兴趣的朋友去看一下NetBeans的Lookup,也能学到很多东西。
我已经提出来了,但有几位去看了呢?只是在质疑我?
很多人根本就没有去看过我说的这些东西,没有了解更多的内容,就是在质疑。

另外“面向接口”这个说法被误解了,我也在主贴中给出了说明,虽然不什么建设性的建议,也至少表明了自己的观点吧。然后说Spring被滥用,有误导倾向。

难道我一定要给出一个方案,才算是有建设性的建议吗?

我也没有用别人的内容来充实自己的主贴,只是对别人的提问加以回答,这也算是盗用吗?


引用
楼主不是一个实在人!

至于我是否实在,我不评价。
我只是希望大家更多地独立思考。
能够对Spring质疑,然后思考自己的用法,然后正确地使用Spring,也同样是好事情。
总比没有人质疑要好一些吧。

就算去看看我上面提到的一些东西,也不算是坏事吧。

+1

思考

相关推荐

    JPA学习笔记-EJB-06JPA+Spring使用经验

    本文将基于一份关于“JPA学习笔记-EJB-06JPA+Spring使用经验”的文档,深入解析JPA与Spring框架集成的关键知识点,以及如何在实际项目中有效地利用这一组合。 #### 二、DAO层设计与事务管理 文档中提到的DAO(Data...

    intellij-spring-assistant-0.12.0.zip

    Spring框架,作为一个开源的Java平台,自诞生以来就深受开发者喜爱,它旨在简化企业级应用程序的开发。Spring以其强大的功能和灵活的设计理念,使得即便是简单的JavaBean也能实现过去只能通过复杂的Enterprise ...

    spring-framework-3.1.0.RELEASE.zip

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试...

    EJB&Spring;详细对比

    Spring 框架是由Interface21公司开发和维护的一个非常流行的开源框架。该框架的核心设计理念是依赖注入(DI),通过这种方式,Spring能够在运行时动态地将服务对象注入到POJO(Plain Old Java Object)类中。这种...

    spring-framework基本包

    Spring 框架是 JavaEE 开发中的一个核心组件,由 Rod Johnson 在其著作《Expert One-on-One J2EE Design and Development》中首次提出。它为开发者提供了一个全面的编程和配置模型,以简化企业级应用程序的开发。...

    Spring-Framework-Intro-Rob-Lambert.ppt

    Spring 是一个轻量级的应用框架,它不仅仅关注Web层,而是覆盖了应用的各个层面,包括数据访问、业务逻辑以及用户界面。Spring 提供了基础架构的支持,允许开发者专注于业务逻辑的实现,而无需关注底层的“管道”...

    Spring2.0jar包

    这个版本引入了许多增强功能,使得Spring成为了J2EE项目中不可或缺的集成框架。下面将详细介绍这些jar包及其在Spring 2.0中的作用。 1. **spring-beans-2.0.6.jar**:这是Spring框架的核心组件之一,包含了Bean工厂...

    精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第14章代码

    在"精通JSF-基于EJB Hibernate Spring整合开发与项目实践-第14章代码"中,你将看到如何将这些技术结合在一起,以构建一个完整的应用。可能的实践内容包括: 1. **JSF与Spring的集成**:学习如何在JSF页面中使用...

    spring-5.3.9-schema.zip

    综上所述,Spring 5.3.9的这些模块共同构建了一个强大且灵活的框架,覆盖了企业级应用开发的多个方面。无论是数据访问、事务管理、并发处理还是Web应用和分布式系统的构建,Spring都能提供全面而高效的支持。了解并...

    spring-5.2.19.RELEASE-schema.zip

    标题 "spring-5.2.19.RELEASE-schema.zip" 提供的是Spring框架的一个特定版本——5.2.19的架构定义文件。这个压缩包包含了一系列与Spring框架相关的XML架构文件,这些文件定义了Spring配置文件中可以使用的元素、...

    Java Jsp EJB Spring学习

    Spring MVC是Spring框架的一部分,它为Web应用提供了一个模型-视图-控制器(MVC)架构,使得代码结构清晰,易于测试和维护。 EJB和Spring之间的关系有时会引发讨论。虽然EJB是传统的企业级解决方案,但Spring以其...

    spring-framework-2.0-rc2

    Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作...至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。

    spring-jboss整合

    Spring拦截器是一个重要的组件,用于在部署时对Spring配置文件进行处理。在JBOSS环境下,Spring拦截器可以帮助实现更深层次的整合。 - **2.4.1 JBoss + Spring + EJB3.0集成** 在JBOSS应用服务器上集成Spring和...

    EJB3与Struts与Spring整合开发(SSE)

    Struts是一个用于构建MVC(模型-视图-控制器)架构的开源框架,而Spring则是一个全面的后端应用框架,包含了依赖注入、AOP(面向切面编程)和多种模块,如数据访问、Web MVC等。 EJB3的整合开发通常涉及到实体Bean...

    最新版spring-framework-4.3.10.RELEASE-schema.zip约束

    Spring Framework 是一个广泛使用的Java应用开发框架,它提供了一个全面的编程和配置模型,用于创建高效、灵活且可测试的应用程序。4.3.10.RELEASE是Spring Framework的一个特定版本,它包含了从早期版本中积累的...

    Spring--IOC学习资料(pdf)

    这种开放性和灵活性使Spring成为构建现代Java应用的首选框架之一。 总之,Spring通过其核心的IOC/DI机制,结合广泛的整合能力和强大的社区支持,为企业级应用开发提供了一个稳定、高效、易于扩展的基础平台。

    EJB 编程及 J2EE 系统架构和设计

    综上所述,EJB编程及J2EE系统架构和设计涉及了企业级应用开发的多个方面,从组件技术到数据访问,再到分布式通信和安全性,构成了一个完整而强大的企业级应用开发框架。通过掌握这些技术,开发者可以构建出高性能、...

    spring-framework-5.0.2.RELEASE-schema.zip

    总结,Spring Framework 5.0.2.RELEASE提供了一个全面的框架,涵盖了Web开发、数据访问、事务管理、消息处理等多个方面,通过模块化的设计,使得开发者可以根据需求选择使用,极大地提高了开发效率和系统的可维护性...

Global site tag (gtag.js) - Google Analytics