CSDN、博文视点名家讲坛之夏昕、林信良谈Spring框架

 
CSDN 、博文视点名家讲坛
夏昕、林信良谈Spring框架
CSDN、博文视点名家讲坛邀请夏昕先生和林信良先生针对Spring框架进行了在线访谈。现将谈话内容整理成文,以飨读者。
采 访 人:《程序员》杂志的技术编辑霍泰稳
受 访 人:夏昕、林信良
采访方式:CSDN聊天室在线访谈 http://chat.csdn.net
 
主持人:
大家好,随着夏昕老师的译作《Spring 专业开发指南》、林信良老师的《Spring 2.0技术手册》的上市,Spring继续成为大家关注的热点。今天我们有幸请到两位老师来参加CSDN F2F俱乐部和博文视点资讯有限公司共同举办的名家讲坛活动,本次活动会就“轻量级框架——Spring”这一话题与大家在线交流。
这里先简单介绍一下两位专家的背景:
夏昕是业界知名的技术专家、金融行业的技术顾问、OpenDoc项目发起人及《DrBobb’s Journal China》的常任编委,著有广受好评的畅销书《深入浅出Hibernate》。
林信良老师(网名为良葛格)曾是台湾SUN教育训练中心讲师,著有《Spring 2.0技术手册》《JAVA 学习笔记》。他是SUN官方教材的主要编写成员之一。林老师的博客地址是:http://blog.csdn.net/ caterpillar_here/
下面请夏昕老师、林信良老师开始回答网友们的提问。
主持人:
第一个问题,新手到达什么程度可以开始Spring的学习?
夏昕:
一般来说,如果拥有一年多持续的Java Web应用开发经验,学习Spring基本上就没太大问题。目前公司团队中,几乎所有成员都是从进入公司开始学习应用Spring的。从程度来看,一年的实际Web开发经验已足以打下理解Spring基础结构的基础。这时候,只要有适当的资料加以辅助,学习起来就不会太难了,呵呵。
主持人:
网友提问,Spring能够粘合不同层面的解决方案,但无论是MVC层还是ORM层,Java领域从来都不缺少好的框架,我们在使用Spring时,在这些框架中作选择的依据是什么?
林信良:
选择框架时,主要是考虑稳定性。例如Struts,虽然它是个相对古老的框架,但稳定性高。也许就现在的设计观点来说它旧了,但开发不是追求流行,不是说最新的框架就是最好的。另外,选择框架的一个重点常被忽略,那就是人员培训。一个好但复杂的框架或一个好但缺乏文档的框架,能发挥它的功用吗?开发不是一两个人的事,而是众人的事。我看过很多公司为了追求流行而忽略了这一点。
主持人:
网友提问,与仅仅使用JSP或Struts等简单框架进行开发相比,使用Spring的Web应用性能如何?
夏昕:
客观来讲,Spring的微内核容器的确会在一定程度上消耗额外的系统性能。不过,除非是开发具有并发性能(比如超大规模论坛)、实时性能(比如超大规模信用卡在线交易系统)等关键业务系统,否则我还是推荐使用Spring。Spring为我们带来的系统结构和开发上的帮助,远远可以抵消这部分损失。
主持人:
网友提问,夏老师是金融行业的顾问,想问一下,您是怎么说服金融行业的人员使用开源产品的,我所遇到的一些金融行业从业人员对开源甚至Java都不愿意接受,他们更喜欢古老但坚固的C++。
夏昕:
这可能是传统思路的延续吧,跟国内金融系统一贯的风险规避思路有关。我为花旗银行亚太数据中心工作的时候,看到很多特关键的业务,其后台都是Tomcat在运行。所以,开源产品本身并没有什么问题,关键还在于思路的改变,这需要时间。
主持人:
网友提问,学习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而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等技术,那您就需要个人学习Spring了,没必要为了用这些东西在公司大力倡导。您可以自学,将来有机会自然就会用上,到时您所学的知识就可派上用场了。
主持人:
网友提问,请问夏老师对EJB 3.0怎么看,EJB 3.0从开源框架里汲取了不少灵感,甚至有一些开源大师也参与其中,那EJB 3.0会和Spring、Hibernate形成竞争关系吗?
夏昕:
EJB 3.0实际上包括了Hibernate,所以它们不存在设计思想上的竞争。至于Spring,竞争可能会比较激烈一点,呵呵。
主持人:
网友提问,Spring框架是否是更适用于B/S项目?
林信良:
Spring框架提供各种子框架,并不局限于B/S项目,您也不用将Spring中的子框架全部用上,您可以根据项目需要,采用其中适当的子框架。不必为了用Java而把Java SE的所有API全部都用上,不是吗?
主持人:
网友提问,是否可以通俗地解释一下“依赖注入”,谁依赖谁了?
林信良:
依赖注入指的是,当您在A对象内部需要B对象的某个功能时,A就依赖于B,您可以直接在A内部实例化B,但日后要修改就麻烦些。如果您不直接在A内部实例化B,而是通过IoC将一个B实例从外部设置给A,那就比较有弹性。举个通俗例子,如果将CPU固定在主板上,那主板就依赖于CPU,若保留CPU的插槽规格,让CPU可以自由更换,就有点IoC的味道了。
主持人:
网友提问,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超出了很多人的想象。很多人认为Spring的MVC framework是非常优秀的,甚至比Webwork 2更优秀。两位老师是如何评价的呢?

林信良:
就我个人而言,使用Spring MVC最大的好处是,可以直接整合并善用其IoC容器功能,Spring MVC与Struts的设计其实是蛮像的,至于其他部分,我并不觉得Spring MVC有什么特别突出之处。
夏昕:
呃,我觉得Spring MVC是以干练取胜,它能以极其简炼的办法实现Control逻辑。喜欢简洁的人会非常喜欢Spring MVC的实现方式。但是它在某些方面还是存在一些缺陷,比如wizard的backspace问题一直没能很好地解决。另外,在实际应用过程中跟Spring Webflow的配合也总是比较尴尬。我们公司目前选择的是Webwork+Spring+Hibernate的组合。
主持人:
网友提问,Spring和轻量级、轻量级和重量级的概念是如何划分的?Spring对JTA、EJBSB、JMS、WebService都支持,而且也都封装得很好。
夏昕:
现在轻量级和重量级的确很难区分了,标准越来越多,也越来越难以衡量。之前有人说,有classloader的算是重量级;也有人说,超过3MB的算是重量级,真的很难说了。EJB有轻量化的倾向,Spring也有重量化的趋势。简单说吧,Spring core算是轻量级的,但是加上其余的部件,估计就得列入重量级的范畴了,呵呵。
主持人:
网友提问,怎么设计系统架构才能成功实现轻量级开发?是不是用了Spring就是轻量级开发了呢?
林信良:
我觉得这个问题提得非常好!常有人问,这个功能用Spring怎么实现?那个功能用Spring如何实现?事实上,我心里想的就是,要实现某个功能,自己写个组件会比直接用Spring来得好!用了Spring并不等于轻量级开发。重点是您有没有采纳其精神,用了IoC容器就轻量级了吗?不见得。什么都来个DI,我看也是很沉重的。如果您在设计时善用IoC,即使不用Spring也是轻量级。
主持人:
网友提问,现在Spring添加了许多的功能,这样下去岂不是也变得不轻量了么?
林信良:
您什么都要用Spring来做,那就是重量级了。还是那句话,不要为了Spring而Spring!如果Spring开始让您觉得沉重,那它就不是个适用的框架,谨记!如果在采用Spring前,您的team就开始叫苦连天,而且还要先花一堆时间去学,但又无法入门,那就不要用。
主持人:
网友提问,Spring和Struts在运用方面各有什么特点?
林信良:
Spring与Struts基本上是两个目的不同的框架,您要比的应该是Spring MVC与Struts的特点!Struts的特点是成熟,它已经是Model 2的代表了,它的可用组件多、Tag丰富。而Spring的View层可以适当地抽换,使用JSTL可以整合其IoC功能等,这就是其特点。
主持人:
网友提问,如果现在要开发一个新的B/S项目,两位推荐的MVC组合是什么?(? + Spring + ? )
林信良:
您指的已经不只有MVC,而是层与层的设计了,Web层现在有很多选择了,Struts/Webwork 2都是不错的,至于Persistence层,现在主流是Hibernate,而学习Hibernate,有助于了解未来的EJB 3.0,这点或许可以列入考虑中。
主持人:
网友提问,请问夏老师 ,怎样修炼才能成为系统架构师?
夏昕:
这里就不说具体的方面了。我觉得,首先是要有好奇心和钻研精神。大家今天能来这里,相信都不缺乏这些,另外很重要的一点就是总结和分析的能力。之前我发布的那些open .doc,都是在研究某个框架时随手记录的一些经验总结,类似每天一篇blog的形式,最后汇总起来,也可以成为一本书籍。《深入浅出Hibernate》就是这么诞生的。有什么收获,写下来,与大家分享,可以使自己进步更快。这一点是我最大的体会。
主持人:
网友提问,请问夏昕老师是哪里人呀?请您说说您的Java学习之路。
夏昕:
呵呵,扬州人。在学习Java之前,做过几年VC++开发,后来转到Java也是很奇怪的事情。好像是Java项目组里的人不够了,刚好这时候自己的事已做完,于是也就凑个热闹写了两个Java Socket程序。后来Java项目组里的人总是不够,于是……呵呵。基本算是在实战中学习的吧。
♠ 主持人:
非常感谢两位老师的精彩回答与奉献精神,敬礼!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值