时间回到2002年,当时正是 Java EE 和 EJB 大行其道的时候,不少知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并非全部的项目都须要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。spring
为了证实他的想法是正确的,于2002年10月甚至写了一本书《 Expert One-on-One J2EE 》,介绍了当时 Java 企业应用程序开发的状况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。数据库
在书中,他展现了如何在不使用 EJB 的状况下构建高质量,可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包命名为 com.interface21,因此人们最初称这套开源框架为 interface21,也就是 Spring 的前身。编程
他是谁呢,他就是大名鼎鼎的 Rod Johnson (下图), Rod Johnson 在悉尼大学不只得到了计算机学位,同时还得到了音乐学位,更使人吃惊的是在回到软件开发领域以前,他还得到了音乐学的博士学位。如今 Rod Johnson 已经离开了 Spring ,成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。架构
在这本书发布后,一对一的 J2EE 设计和开发一炮而红。这本书免费提供的大部分基础架构代码都是高度可重用的。 2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring ,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始。随后 Spring 发展进入快车道。框架
Spring 是指一个用于构造 JAVA 应用程序的轻量级框架,但这句话包含两个有趣的地方。首先,你能够采用 Spring 来构造任何程序,这一 Apache Struts这样的框架不一样,你不限定于只编写 WEB 应用。其次,以上解释中的“轻量级”并不意味着类数量不多,或者发行包大小很小,实际上,它指的是 Spring 哲学原理的总称——那就是最少的侵入。 Spring 是轻量级的,意味着你只需对你的程序代码作不多改动 ( 倘若有的话 ) ,而得到 Spring 核心带来的好处,你也能够在任什么时候候选择抛弃 Spring ,你会发现这实在很容易。注意,上面这句话只针对 Spring 核心自己——不少附加的 Spring 组件,好比数据访问,须要与 Spring 框架有相对紧密得多的耦合关系。可是,这些耦合带来的好处显而易见。spring-boot
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而建立的。框架的主要优点之一就是其分层架构,分层架构容许您选择使用哪个组件,同时为 J2EE 应用程序开发提供集成的框架。工具
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。 Spring 模块构建在核心容器之上,核心容器定义了建立、配置和管理 bean 的方式spa
Spring 框架图:设计
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory ,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开 ( 工厂方法 ) 。对象
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。 Spring 上下文包括企业服务,例如JNDI 、 EJB 、电子邮件、国际化、校验和调度功能。
经过配置管理特性, Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。因此,能够很容易地使 Spring 框架管理的任何对象支持 AOP 。 Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。经过使用 Spring AOP ,不用依赖 EJB 组件,就能够将声明性事务管理集成到应用程序中。
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不一样数据库供应商抛出的错误消息。异常层次结构简化了错误处理,而且极大地下降了须要编写的异常代码数量(例如打开和关闭链接)。 Spring DAO 的面向 JDBC 的异常听从通用的 DAO 异常层次结构。
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO 、 Hibernate 和 iBatis SQL Map 。全部这些都听从 Spring 的通用事务和 DAO 异常层次结构。
Web 上下文模块创建在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。因此, Spring 框架支持与 Jakarta Struts 的集成。 Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工做。
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。经过策略接口, MVC 框架变成为高度可配置的, MVC 容纳了大量视图技术,其中包括 JSP 、 Velocity 、 Tiles 、 iText 和 POI 。