Spring是兼容和组件化的,Spring具有一种层次化结构,这意味着你可以独立的选择使用它的任何组成部分,因为它是内部统一的。由此你可以达到你的学习曲线的最大值,例如,也许你选择Spring仅仅是为了简化JDBC操作,或者管理你的所有业务对象。同时你可以很容易地将它引入现有的项目当中。
Spring的设计意图是为了让你能够写出容易测试的代码,因此Spring框架是测试驱动项目的理想选择。
Spring不会为你的项目带来不必要的框架依赖性,它潜在的一步到位,实现了大部分典型项目的基础结构,它取得了其他框架所没有取得的成功。
自2003年2月,作为一个开源项目,Spring经历了漫长的发展历程。项目始于我2002年晚些时候出版的一本叫做《Expert One-on-One J2EE Design and Development,》书的基础代码,书中阐述的思想为后来出现的Spring提供了雏形,尽管如此,产生的基础架构要回溯到2000年初,它反映了我所成功实现的一系列商业项目架构的过程中积累的经验。
自2003年一月,Spring已经贡献给SourceForge,现在那里有20名开发人员,作为主要的贡献者完全投入开发和技术支持,加上众多的社区参与其中,使它达到任何个人都无法达到高度。
Spring的构架优势:
在接触细节前,让我们来看看Spring为项目带来的好处:
Spring能够有效管理中间层对象,不管你选择EJB与否,它只关注垂直性,如果你仅使用Struts或者其他框架,它会为你提供适合的J2EE APIs。它最能体现价值的应该在中间层,Spring的配置管理服务能够应用于任何运行时环境下的任何架构层。
Spring消除了在许多项目中随处可见的Singletons的滥用,在我看来,这是一个关键问题,因为它影响了程序的宜测试性和面向对象性。
在整个应用或项目中,它以一致的方式处理配置,消除了一系列对自定义属性文件格式的需要。曾经为了寻找一个特殊类所使用的特殊属性值或者系统属性,而不得不阅读文档甚至源代码。Spring仅仅关注类的JavaBean属性值或构造函数参数,它是借助于控制反转和依赖注入(下面要讨论)来实现这一简化的。
Spring通过减少编程中对接口而不是对类所花费的代价,它极大的便利了良好编程实践,并使得代价接近于零。
Spring是如此的设计完善,使得在构建应用的过程中尽可能少的应用它的APIs,在Spring应用的大部分业务对象对Spring没有依赖性。
使用Spring构建应用是单元测试更加容易。
Spring可以作为实现EJB的一种选择,而不仅仅由应用框架而决定,你可以选择实现;类似POJOs或者 local EJBs的业务接口,不必影响调用代码。
Spring能够帮助你解决很多问题而不使用EJB,它能为你提供一种适合EJB开发应用的选择,例如,Spring使用AOP来实现声明性事务管理而不用EJB容器,如果仅仅用单数据库,甚至不用一个JTA实现。
不论你使用JDBC或是关系对象映射工具,例如TopLink, Hibernate或是一个JDO实现,Spring为数据访问提供了一致的框架。
Spring在许多的方面提供了一致的,简单的编程模型,并将它们完美的结合起来,你可以在Spring实现 JDBC, JMS, JavaMail, JNDI以及其他的重要APIs时看到这种一致性。