轻量级开发——Spring (聊天记录)


夏昕 :
新手达到什么程度可以开始spring的学习?
最简单的来说,一年多持续的Java Web应用开发经验,基本上就没太大问题。 目前公司团队中,几乎所有团队成员都是从进入公司开始学习应用Spring,从学习的速度来观察,基本上一年的实际WEB开发经验,已经足以产生理解Spring基础结构的基础。这时候,只要有适当的资料加以辅导,应该学习曲线不会太过难看,呵呵。

主持人 :
那么Java领域的开源事业空前繁荣,spring作为期待包容开源框架的产品,它的研发更新速度是否能够适应Java开源领域以及企业应用领域的需要呢?

林信良 :
2. spring能够粘合不同层面的解决方案,但无论是MVC层还是ORM层,Java领域从来都不缺少好的框架,我们使用spring时,在这些框架中做选择的依据是什么?
选用框架的依据,主要是考虑稳定性,例如Struts,虽然它是个相对古老的框架,但稳定性高,也许就现在的设计观点来说,它旧了,但开发不是追求流行,不是最新的框架就最好,另一点,选择框架的一个重点常被忽略,那就是人员培训,一个好但复杂的框架,一个好但文件缺乏的框架,用了好吗?开发不是一个、两个人的事,而是众人的事,我看过很多公司为了追求流行而忽略这点。

夏昕 :
1. 相比较仅仅使用jsp或者struts等简单框架的开发,使用了spring的web应用,其性能如何?
客观来讲,Spring的微内核容器的确会在一定程度上消耗额外的系统性能。 不过,除非对于并发性能(比如超大规模论坛)、实时性能(比如超大规模信用卡在线交易系统)关键的业务系统,我还是推荐使用Spring进行开发。 Spring为我们带来的系统结构和开发上的帮助,远远可以抵消这部分损失。


林信良 :
学习J2EE开发的人,不学习spring可以么?
可以的啊!并没有规定一定要学过J2EE,才可以学习Spring,也没有规定一定要学过Spring,才可以学习J2EE,只是,学习Spring,甚至是一些Opensource project,重点是了解其精神,学过Spring,有助于您在J2EE开发时的设计,事实上,Opensource界在Java的设计精神上取得很大的胜利,在未来的Java EE中,有很多都是借镜Opensource界的经验,具体就是采用了Spring/Hibernate的一些设计精神,在这种情况下,学习Spring,或说过学过Spring/Hibernate等,多少有助于了解将来的Java EE。

夏昕 :
对spring的学习和应用有没有能力程度的区分?(有的话,依据是什么)
对Spring的学习和应用,很多情况下是受制于学习者对于“设计”本身的领悟。从某些方面来讲,可能好奇心比所谓的能力更加重要一点。

林信良 :
学习spring的好书和论坛有哪些?也请林老师回答一下
我入门Spring时,夏昕先生的Open Doc给了我很大的帮助,Spring in action是本入门的好书,Spring的参考文档一定要看,另一方面,也可以看看Professional Java Development with Spring Framework,当然,最重要的,如果有时间,回去翻翻J2EE without EJB。

夏昕 :
学习spring的好书和论坛有哪些?
其实近期国内出版的几本书籍,我都看过,都是很不错的Spring参考资料。 林先生的就不错 :) 毕竟这也是出版社在咨询了很多专家之后确认的出版计划。 至于论坛,csdn,javaeye和cjsdn都值得推荐。csdn以人气取胜,javaeye和cjsdn则相对讨论较为深一点,适合有一定经验的Spring使用者。

林信良 :
什么情况下适合将spring纳入项目中加以应用?(最适合spring应用的场景有哪些)
使用Spring,最怕的是为了Spring而Spring,为了IoC而IoC,为了AOP而AOP,这样的话,Spring对您没有好处,有几点可以参考… 1. 當元件出現重用時,才開始考慮使用 Spring IoC。 2. 元件動用到外部資源時,使用 Spring IoC。 3. 當元件需要 AOP 時,再考慮設定到 Spring xml。 4. 能不用 Spring IoC 就不用! 5. 不要為Spring而Spring。 6. 不要為IoC而IoC。 7. 不要為AOP而AOP。 简单的说,采XP的方式,可以让您考量到,何时该采用Spring,何时该采用IoC、AOP等。 这边有个案例可以参考: http://www.javaworld.com.tw/roller/page/ingramchen?entry=2006_2_1_KeepSpringIoCCoarseGrained 另一方面,Spring在JDBC这方面所提供的封装,其实蛮值得分开来看看的,可以省去不少的功夫。


夏昕 :
spring里面的接口编程有哪些好处,如果用类来写实现service,dao层 同样可以实现注入啊 为什么要接口呢,有的资料说可以重用代码,但是一般service,dao的接口就只被一个类实现.何来重用呢?
这个...就跟电脑上的USB接口一样,一般只会插鼠标,如果什么时候需要插U盘了,那也可以。 Spring提供了这种实现的基础,至于重用性本身是否存在,那可能就需要进行项目前的调研了。比如做一个只用一次的投票表单,那么不如一个JSP搞定来得干净利落,这里重用性并不重要。

林信良 :
公司的业务都是使用最简单的jsp+beand的技术,这样接触struts和spring的机会就很少,林老师可以提些建议,如何在这种环境下学好spring
公司如果不使用Spring,并不是什麽坏事,我看过因为用了Spring/Hibernate而使得学习成本大副提高的情况,如果您们公司业务完全不用Spring或Sturts等技术,那就是您个人学习问题了,没必要为了用这些东西,在公司大力倡导,您可以自己当作功课学习便是,将来有机会用上时,自然就会用上,也许到时您的先前投入的学习就可派上用场。

夏昕 :
请问夏老师对EJB3.0怎么看,EJB3.0从开源框架里汲取了不少灵感,甚至一些开源的大师也参与其中,那EJB3.0会和spring,hibernate形成竞争关系吗?
EJB3实际上包括了Hibernate,所以实际上不存在设计思想上的竞争。 至于Spring,竞争可能会比较激烈一点,呵呵。

主持人 :
在当今的MVC framework里,似乎Webwork2逐渐成为主流, Webwork2+SpringFramework的组合变得越来越流行。这似乎意味着Spring自带的MVC framework远比Webwork2差,所以大家纷纷用Webwork2来代替。确实,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象。很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀。两位老师是如何看待的呢?

夏昕 :
问一个新一点的问题,ruby on rails出现后,spring是否能够适应现在互联网敏捷开发的要求?
可能这不仅仅是Spring的问题。而是Java WEB开发与ROR开发之争了。目前来看,Spring还谈不上是一个WEB的RAD框架,它本身还是定位于一个微内核容器,希望会有相关的子项目出现。 对于java web开发中的RAD感兴趣的,可以去看看RIFE,可以说是ROR的Java实现,这其实很早就出现了。

林信良 :
是否可以通俗的解释一下“依赖注入”,谁依赖谁了
依赖注入,当您在A物件内部需要B物件的某个功能,A就依赖于B,您可以直接在A内部直接实例化B,但日后要修改就麻烦些,如果您可以透过IoC,而不是直接在A内部实例化B,而是将一个B实例从外部设定给A,那就比较有弹性。 举个通俗例子,CPU如果固定在mainboard上,那mainboard就依赖于CPU,保留CPU的插槽规格,让CPU可以自由更换,就有点IoC的味道了。

夏昕 :
现在,基于spring框架开发的应用中,有没有大型应用的成功案例,比如说ERP方面的?
一般能用EJB实现的,用Spring实现肯定没有问题,呵呵。可能更多时候,大型系统发生问题大多集中在数据库访问层,Hibernate在这里是有所欠缺的。

林信良 :
Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象。很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀。两位老师是如何看待的呢?
就我个人而言,使用Spring MVC最大的好处,是可以直接整合并善用其IoC容器功能,Spring MVC与Struts的设计其实是蛮像的,其它的部份,我并不觉得Spring MVC有什麽特别突出之处。

夏昕 :
尽管 Java™ 编程语言功能强大,但对于轻量级开发,它有着严重的局限性。对于某些问题,其他的编程语言(比如 Ruby)也许会改善生产效率!那是不上意味那是不是意味着将来ruby会成为主流?
Ruby是小语系,我觉得很类似java之前的SmallTalk。 对于轻量级开发,如目前典型的Web2.0网站,我觉得比较不错,短平快。 不过感觉普及性和成属性上还有待提高,很简单的来讲,我很难从人才市场上找到熟练使用ROR的程序员。 另一方面,对于复杂的企业级应用,Ruby 还欠缺很多,很简单的例子,如果要用到密钥算法,ruby本身就无法处理,只能借助一些第三方类库,这里就存在很多兼容性的问题。 我觉得可见的未来,主要的战场还在微软的.net平台,以及IBM,SUN的Java平台上展开。 ROR如果能顺利发展,有可能会顶替PHP的位置,不过也只是可能。

林信良 :
尽管 Java™ 编程语言功能强大,但对于轻量级开发,它有着严重的局限性。对于某些问题,其他的编程语言(比如 Ruby)也许会改善生产效率!那是不上意味那是不是意味着将来ruby会成为主流?
一个语言是否成为主流,有很多因素,就我个人而言,那并不是从语言本身来考量,至少要有几点:是否有大厂支持?是否有活跃的community?是否有充足的文档?是否有培训愿意投入,要记得,语言的目的是为了让我们解决问题,很多语言都很优秀,但厂商愿意采用该语言的原因并不一定是该语言很优秀!

夏昕 :
Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象。很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀。两位老师是如何看待的呢?
呃,Spring MVC我觉得是以干练取胜,可以以极致简炼的办法实现Control逻辑。喜欢简洁的人会非常喜欢Spring MVC的实现方式。 但是在某些方面还是有点缺陷,比如wizard的backspace问题,一直没能很好解决,另外,跟Spring webflow的配合,在实际应用过程中,也总是比较尴尬。 我们公司目前选择的是webwork+Spring+hibernate的组合。

林信良 :
一个在Spring框架下开发的系统,如果提供一个友好的接口给外部系统来调用其展示层呢?
外部系统调用其展示层是什麽意思呢?是指准备好View Model让其它系统可以根据View Model显示吗?

夏昕 :
本次主题是关于Spring和轻量级,轻量级和重量级的概念如何划分? Spring 对JTA,EJBSB,JMS,WebService也都 支持都也封装的很好。
现在轻量级和重量级的确很难区分了,标准越来越多,也越来越难以衡量。 之前有人说,有classloader的算是重量级,也有人说,超过3MB的算是重量级。 真的很难说了。 EJB有轻量化的倾向,Spring也有重量化的趋势。 简单说吧,Spring core算是轻量级,但是加上其余的,估计就得列入重量级的范畴了,呵呵。

林信良 :
想问老师,怎么去设计系统架构,才能成功实现轻量级开发?我觉得我们讨论不应该局限在Spring!是不是用了spring就是轻量级开发了呢?
我觉得这个问题提的非常好!常有人问说,这个功能用Spring怎麽做到?那个功能用Spring如何达到?事实上,我心裹想的就是,这个功能基本上自己写个元件,会比直接用Spring来的好吧!用了Spring并不等于轻量级开发,重点是,您有没有采纳其精神,用了IoC容器就轻量级了吗?不见得,什麽都来个DI,我看了是很沉重,如果您设计时善用IoC,即使不用Spring,也是轻量级。

夏昕 :
acegi 作为spring的一个子工程,它的使用难度是不是很高?
如果按照acegi的标准设定来使用的话,估计会折磨死一票大仙。不过,具体应用中,我们可以对权限系统本身进行简化,只使用acegi的核心功能。 这样使用起来还是相对简单的。

林信良 :
现在spring添加了许多的功能,这样下去岂不是也变得不轻量了么?
您什麽都要用Spring来做,那就是重量级,还是那句话,不要为了Spring而Spring!如果Spring开始让您觉得沉重,那就不是个适合的框架,谨记!如果要采用Spring前,您的team就开始叫苦连天,要先花一堆时间去学,但又无法入门,那就不要用。

夏昕 :
新的aspectj属性的引入是不是让spring2 aop开发的门槛提高了?
呃,应该是多了一些选择,入门的门槛实际上我个人觉得跟原来差不了太多。

夏昕 :
现在spring添加了许多的功能,这样下去岂不是也变得不轻量了么?
轻量和重量级,目前很多时候只是一种相对化的描述。 轻量级的一般只需要看轻量级的资料就可以搞定,重量级的需要看很多很多。 呵呵,玩笑话。 很多时候,这都是一种平衡,我觉得大家无需顾及具体的概念和描述。 能用最少的代码,写出结构清晰的系统的,就是好的。

林信良 :
好的,我主要意思想请教林老师,设计模式在开发中怎么才能应用的更符合实际情况
当遇到一个功能时,先就您的经验,预想如何设计的有弹性,而不是先去翻设计模式的书,说我要用某某模式;之后遇到需求,再逐步重构,是的,重构就是设计模式最好的工具,模式不是准则,而是重构后的一个产物。

夏昕 :
夏老师,spring中提供的功能组件您最欣赏的是哪些?比如对orm的封装或者任务调度,MVC之类的
最欣赏的就是对JDBC以及各ORM的封装。 实际上,目前工作中,除了必不可少的BeanFactory,ORM层也是不可或缺。 其余的部分,倒是会根据情况进行替代。

林信良 :
Spring中动态实现AOP,到底怎么动态法呢?具体意义是什么呢?
一个例子就是动态代理,我只要知道代理的interface,具体要代理的对象不用理会,随时可以为指定的对象进行代理,只要它有实作该interface。

夏昕 :
轻量级方法包括敏捷过程,鼓励使用简单原始的 Java 对象(POJO)编程,轻量级设计模式 使您可以在对象和集成服务之间进行松散耦合,请问老师,这些思想在spring里是怎么样体现的呢?
我觉得Spring中很多地方都体现了这一思路。包括Spring MVC,AOP,以及事务管理中。只要你用一些“普通”的代码与Spring框架下的实现代码加以比对,相信就很清晰了。

林信良 :
Sping 和 Struts 在运用方面各有什么特点
Spring与Struts基本上是两个目的不同的框架,您应该要比的是Spring MVC与Struts两个的特点!Struts的特点是成熟,已经是Model2的代表了,可用的元件多,Tag丰富,而Spring的View层可以适当的抽换,使用JSTL,可以整合其IoC功能等,是其特点。

夏昕 :
想问一下夏老师:是否轻量和是否简单是否构成关系呢?
我觉得简单是轻量级的一个特征吧。

林信良 :
现在appfuse,springside对spring提供了一些封装让用户更快的进行spring开发,我觉得spring应该提供一些类似的向导,让开发人员更容易上手,林老师认为如何?
是的!这是一定要的,开发要求的是方便、速度、产能,甚至视觉化,在Java领域,甚至说Opensource领域,一直很忽视这点,可惜!设计的东西好固然重要,但一个好用的工具或向导,我觉得是不可缺乏的。

夏昕 :
请夏老师讲下怎么用spring aop来实现声明式事务管理!?
在这里展开来说可能不是特别方便了。您可以去下载一份我之前的免费文档 Spring开发指南 看看,里面有提到。 如果需要更进一步的描述,可以看下林先生的书。

林信良 :
如果我现在要开发一个新的项目,B/S,两位主持人推荐的MVC组合是什么? ? + SPRING + ?
您指的已经不只有MVC了,而是层与层的设计了,Web层现在有很多选择了,Struts/Webwork2都是不错的,至于Persistence层,现在主流是Hibernate,而学习Hibernate,有助于了解未来的EJB 3,或许这点可以列入考量。

夏昕 :
WEBWORK+SPRING+HIBERNATE的结构,如果一个项目的CLASS图分析好以后,这个CLASS图在哪里实现?
应该这三个层面都有体现才是,不会有哪一层能解决所有的类关系的。

林信良 :
依赖注入,B实例是如何从外部设定给A的
可以透过Setter或Constructor设定给A。

主持人 :
刚才林老师反馈说,很多问题只有深入展开讨论才好,可惜限与时空与网络限制不能完成,希望大家在会后去翻阅相关的书,特别是两位老师的泣血之作去研究与学习!

林信良 :
教林老师,对大陆和台湾的软件从业人员和软件行业发展能说出区别,我从业4年开发工作,总感觉开发工作不正规,首先是缺少文档,还有正式的项目管理,所以看见印度发展 很着急,请林老师给大陆程序员提点要求
这部份两岸似乎是差不多,我之前看过一篇分析,印度的开发很标准化,而两岸的开发则较有弹性,标淮化的东西,适合开发一些大型项目,而两岸的技术人才在接案时的弹性,则可以应付一些需求变更频繁,经费有限的中小型案子,也就是所谓的适合打游击战,如果以这麽分,印度就像是打正规战,游击战好还是正规战好,其实也是不一定,目前我觉得是各有优势。

林信良 :
Spring是怎么处理分布式的应用的呢
分布式应用并非我的专长领域,这方面我就不好回答了XD

夏昕 :
点名要请教夏老师的:)怎样修炼才能成为系统架构师?
这里就不说具体的方方面面了。 我觉得,首先是好奇心和钻研精神。 大家今天能来这里,相信都不缺乏这些。 另外很重要的一点就是总结和分析的能力,之前我发布的那些opendoc,都是之前在研究某个框架时随手记录的一些经验总结,类似每天一篇blog的形式,最后汇总起来,也可以成为一本书籍。《深入浅出Hibernate》就是这么诞生的。 有什么收获,写下来,与大家分享,可以使自己进步更快。这点是我最大的体会。

夏昕 :
Spring是怎么处理分布式的应用的呢[
Spring本身并不支持分布式。 其实分布式本身也未必需要应用层的容器来支持,我觉得,某些情况下,比如牵涉到数据库分布式操作的情况下,利用数据库本身的机制实现分布式操作可能更好。

林信良 :
SPRING+HIBERNATE+STRUTS架沟,分析好的CLASS图在哪一层面上实现?http://java.chinaitlab.com/Spring/38258.html这里的一种合适么??
这个问题不是很具体耶!。。。Struts + Spring + Hibernate 讨论的应该是在架构上的整合方式,要具体讨论类别图设计与实现,应该是个别框架的讨论范围。

林信良 :
林老师对这个问题如何看?ruby on rails出现后,spring是否能够适应现在互联网敏捷开发的要求?
敏捷开发指的是XP吧!我觉得Spring本身也蛮适合用XP的!但是该试著再降低学习的难度,Ruby on rails给人的感觉是非常简洁,我可以简单的完成其它Java项目可以完成的东西。

夏昕 :
夏昕是哪人呀,说说他的学习java之路 快问问,要不一会人家就走了
呵呵,扬州人。在学习Java之前,做过几年VC++开发,后来转到Java也是很奇怪的事情。好像是Java项目组里人不够了,自己的事做完,也就凑个热闹去写了两个Java Socket程序。后来Java项目组里人总是不够,于是..... 呵呵。基本算是实战中学习的吧。

林信良 :
两位老师能不能给我们开发者提写建议(学习方法,工作态度等等,呵呵)--成为一个优秀的系统开发员?
学习态度喔!不要燥进,不过是很难做到,我承认我有时也蛮浮燥的,举个例子来说,这阵子的AJAX热潮,由于之前并不是很重视AJAX当中的一些技术组合,因而在学习上觉得很烦燥,后来我自我检讨之后,选择重新认识这些技术组合,重新看看DOM,重新认真研读JavaScript,现在就踏实多了,对于AJAX也渐能掌握!至于工作态度,我的想法是,认真,并找个对的舞台,很多人其实找错了舞台,找错了自己该发挥的方向,只有对的舞台,您才可以认真的发挥,而不只是认为是个工作。

夏昕 :
两位老师能不能给我们开发者提写建议(学习方法,工作态度等等,呵呵)--成为一个优秀的系统开发员?
其实还是刚才的话,不但要多看,多“玩”,还得学会总结,如果能把某个技术,某个主题很有条理的写出来,可能比单纯的努力钻研要有效的多。 总结和书写的过程,也是回顾和思考的过程。

你可能感兴趣的:(spring,Hibernate,mvc,敏捷开发,IOC)