`
isiqi
  • 浏览: 16466477 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论
阅读更多
用Spring有一段时间了,最近在部门内部做个Spring的培训,一个很自然的问题出现大脑之中,Spring好在哪?
我可以摆出许多广告,但那不是我的感觉。于是,我向自己发问,要求一个属于自己的答案
DependencyInjection
原来,它叫IoC。MartinFlower发话了,是个框架都有IoC,这不足以新生容器反转的“如何定位插件的具体实现”,于是,它有了个新名字,DependencyInjection。
其实,它就是一种将调用者与被调用者分离的思想,UncleBob管它叫DIP(DependencyInversionPrinciple),并把它归入OO设计原则。
同Spring相比,它更早进入我的大脑。一切都是那么朦胧,直至Spring出现。
慢慢的,我知道了它还分为InterfaceInjection(type1),SetterInjection(type2),ConstructorInjection(type3)。MartinFlower那篇为它更名的大作让我心目关于它的一切趋于完整。
在Spring中,它是一切的基础。Spring的种种优势随之而来。
于我而言,它为我带来更多的是思维方式的转变,恐怕以后我再也无法写出那种一大块的全功能程序了。
动态配置
这里提及的动态配置包括两个部分:系统的生成和系统的修改。
基于Spring的应用是依赖配置文件组织起来的,这意味着我们所编写的程序,更多的是在完成具体的功能,而各个功能之间的串连,就要靠配置文件了。
随之而来的一个好处就是,我们可以在不重新编译代码的情况下,改变系统行为。
或许不修改代码可以成为另一个理由,但在我看来,修改Java代码和修改配置文件没有什么本质区别,只要能把配置文件视为另一种语言,不是吗?
有位同事问我,Spring的配置文件的正确性是否只有运行时才能发现,道理上讲是这样的。每次修改配置文件,然后跑起来确定其正确性,这确实是一件费力不讨好的事。如果你是Eclipse的用户,你就幸福多了,已经有人开发了Spring的插件协助你完成这个工作。
易测的结构
曾经有一次在现场,我改一个简单的小bug,简单到加在一起改的代码不超过五行。但从我定位到错误到完全把bug修正,用了两个多小时,这使得两个同伴最后只能对我怒目而视。
这其中固然有我自己糊涂的原因,代码不可测也是很重要的一个原因。每次修改了一句话,就要部署到应用服务器上,运行起来看结果。相信每个有在应用服务器上部署应用经验的人都知道那是多么漫长的过程。
如果以前对我说,对于一个好的应用来说,可测试性也非常重要,我摆出一副非常不屑的态度,惨痛的教训彻底的教育了我。
DependencyInjection让整个应用结构清楚了许多,我们可以针对每个具体的模块进行单元测试,而不必像过去一样,只有把整个应用部署到应用服务器上运行起来之后,才能测试。
局部的稳定带来的是更多的信心,当系统一点点整合在一起,信心就越来越足。
不存在的接口压力
项目组中的一个同事对我说,用Spring跟没用一样。原因是我们的代码并没有继承Spring中的类,也没有实现Spring中的接口。
这恰好就是Spring的优势之一,这使得我们的应用不必困在Spring上。依赖于特定的API就意味着要在一棵树上吊死。我们原来系统中很难测试的另一个原因就是在代码中遍布HttpServletResponse,这使得我们的代码只有放在Web容器中才能跑起来。
RodJohnson在评价一个Web框架的优劣时,将是否依赖于ServletAPI作为一个及其重要的标准。
依赖于特定API就意味着要依赖于特定的容器或是框架,就像Servlet一定要跑在WebContainer里,EJB一定要有AppServer一样。
没有了接口的压力,使得我们应用可以完全脱离Spring运行。在系统开发期间,我不断强调即便没有Spring,我们的应用依然可以自行组装来运行,给我这种底气的理由就是Spring没有侵略性的接口。另一个原因是当时我并没有对把整个系统放到Spring上有十足的把握。^_^
消除Singleton
Singleton是二十三个经典的设计模式之一,不幸的是,到了J2EE的世界,由于classloader的原因,它几乎成了一个经典的反模式。曾经在自己的代码中大量运用Singleton,部署中遇到的问题加上太多的重复代码,给我留下了一段不堪回首的经历。
Spring的出现漂亮的解决这个问题,我只要在配置文件中配置一个bean,它缺省行为就是Singleton,我不必再为反模式抓空心思,不必再为了Singleton编码。
择其善者而从之
不同于很多技术,Spring并不是一个“要么全部,要么没有”的东西,它是一个分层的结构。我们可以从中选取我们感兴趣的部分,而不必理会其它的部分。我用得最多的部分就是Spring的Core部分,也就是基于bean的配置框架,对于其上的MVC、ORM、DAO等等,我并不了解,但这丝毫不影响我的运用。
开阔视野
Spring本身包含很多的东西,从DependencyInjection之类思想性的东西,到现在颇为流行的AOP、ORM之类实现技术。在Spring的路线图中,JMX、JMS、JCA等等已经都纳入了Spring未来的发展计划中。于我而言,沉浸于Spring的世界里,一段时间内不愁没东西可学。
Spring起源于RodJohnson的《ExpertOne-on-OneJ2EEDesignandDevelopment》,所以,这本书成了Spring最好的辅导材料。书中的许多观点的提出完全是基于Rod本人的实际经验,比起不少假大空的理论或是广告来得实际得多。Spring邮件列表中有人这样评价,这本书值得“cover-to-cover”的读。如果你和曾经的我一样,迷失于J2EE纷繁复杂的世界中,这是一剂让你清醒过来的良药。
这就是我眼中的Spring,这些理由比之许多Spring的广告显得单薄许多,因为我对Spring的了解实在有限,但这足以让我相信在Spring上花费时间是值得的。
分享到:
评论

相关推荐

    Spring-Sowing课文翻译.docx

    【Spring-Sowing课文翻译】这篇文档讲述了马丁·德莱尼和他的妻子玛丽在二月清晨进行春播的故事,描绘了他们新婚生活中的初次农耕活动。这个故事虽然源自文学作品,但可以从中提取一些与互联网无关但与生活、情感和...

    后端开发/大数据开发 + RESTful API + 项目(依赖+启动类+实体类+controller层+统一响应对象)

    俗话说三个臭皮匠顶个诸葛亮,没有所谓的大咖,只有默默奋斗的人,像是蜗牛,一步一步的往上爬,相信总会有一天我们也会成为别人眼中的高塔,眺望四方,只有无尽的过往,回首时,我们没有遗憾,只有回味。

    (基于springboot框架的Java毕业设计)蓝星星关爱地球网(源码).zip

    (2)前台用户操作包括报名参加蓝星星组织,发布我眼中的地球,上传今天我为地球做了什么,可以进行用户点赞,用户发表,用户删除等,进入蓝星星组织后同时可以加入任务,任务后可以发表蓝星星-任务报告,蓝星星知识...

    阿里大牛眼中——Dubbo 的过去、现在以及未来

    标题为《阿里大牛眼中——Dubbo 的过去、现在以及未来》,描述提到了阿里巴巴技术专家马昕曦(小马哥)将会分享有关Dubbo的历史、现状以及未来展望。其中提到了分布式系统和微服务架构,特别强调了对于Java程序员的...

    软件工程师清凉夏天个性简历.docx

    【软件工程师简历解析】 这份简历是一位年轻的男性软件工程师,23岁,汉族,毕业于清华大学,本科专业为通信工程。...简历展示了他在软件开发领域的扎实基础...他的多才多艺和积极态度使其成为潜在雇主眼中的优秀候选人。

    最好用的开源b2c电商系统java版

    1. **Spring Boot**:作为Java生态中的主流框架,Spring Boot简化了创建独立的、生产级别的基于Spring的应用程序,可能被用来构建JShop的基础架构。 2. **MyBatis**:MyBatis是一个持久层框架,可以将SQL与Java代码...

    精通版四年级上册小学英语 Unit 6 单元知识点小结.docx

    在小学英语四年级上册的Unit 6...这个句型表明观察者眼中人物的外观特征。 通过学习这些词汇和句型,孩子们可以更好地描述自己和他人的外貌特征,同时也能在日常交流中表达情绪和祝福,进一步提升他们的英语表达能力。

    KeTangPai.rar

    Spring框架是实现MVC模式的优秀工具,它提供了依赖注入、AOP(面向切面编程)等功能,简化了JavaWeb应用的开发。 另一个重要的组件是Java Persistence API (JPA),它是Java标准的持久化框架,用于操作数据库。...

    javassh源码-java-learning:旨在打造在线最佳的Java学习笔记,含博客讲解和源码实例,包括JavaSSH和JavaWeb

    Spring + MyBatis 该项目为多个小项目的集合(持续更新中...)。内容类似淘宝、京东等网购管理系统以及图书管理、超市管理等系统。目的在于便于Java初级爱好者在学习完某一部分Java知识后有一个合适的项目锻炼、运用...

    精美网站精美网站精美网站

    在构建一个“精美网站”的过程中,我们关注的不仅仅是视觉效果,更是用户体验、功能实现和网站性能的综合体现。以下是一些关键的知识点...每个环节都是不可或缺的,它们共同构建了用户眼中那个既美观又实用的网络空间。

    细品这杯香浓的咖啡-阿里中间件高级专家沈询的Java之旅

    本文将深入探讨由阿里中间件高级专家沈询分享的Java之旅,带你领略这位专家眼中的Java世界,以及他在中间件领域的深厚造诣。 首先,我们要理解Java作为一门多用途、面向对象的编程语言,它的优势在于其跨平台性、...

    mybatis01.zip

    在初学者眼中,MyBatis可能显得有些复杂,但它的灵活性和强大的功能使其成为处理数据库操作的重要工具。这篇博客将带你初步了解MyBatis的基本用法,包括增删改查(CRUD)操作。 首先,我们需要理解MyBatis的核心...

    mybatis.zip

    在初学者眼中,MyBatis 提供了简单易用的API,帮助开发者摆脱了对 JDBC 的繁琐操作,同时又能避免 Hibernate 等 ORM 框架的过度封装。这个名为 "mybatis.zip" 的压缩包包含了一个关于 MyBatis 学习的基础项目,主要...

    华为java面试题总结

    在Java开发者的眼中,华为无疑是中国IT行业的巨头,其面试流程严谨,技术要求高。这份“华为Java面试题总结”旨在为准备进入华为的Java工程师提供一些关键知识点的梳理和复习指导。以下是对这些面试题核心内容的详细...

    struts2 .pdf

    Struts2可以很容易地与其他Java Web技术如Spring、Hibernate等进行集成,形成强大的企业级应用解决方案。 综上所述,Struts2是一个强大而灵活的Java Web框架,通过采用MVC设计模式,它能够帮助企业级应用程序实现...

Global site tag (gtag.js) - Google Analytics