1、前言html
Spring 框架能够说是 Java 开发人员使用的最流行的应用程序开发框架之一。它目前由大量提供一系列服务的模块组成。包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类。Spring 框架的全部组件都经过依赖注入粘在一块儿。依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易。java
多年来 Spring 框架已变得足够成熟。几乎全部 Java 企业应用须要用到的基础组件均可以在 Spring 框架中找到。但在一个新应用中将全部须要的 Spring 组件整合并配置好并不容易。这包括在 gradle/maven 中设置依赖库,使用 xml、注解或 java 代码配置须要的 Spring Bean。Spring 开发者意识到这里的绝大多数工做是能够能够自动化的,Spring Boot 出现了!web
Spring 在起源能够回溯到 Rod Johnson 编写的“ Expert One-to-One J2EE Design and Development ”一书 (Wrox , 2002) 。在这本书中, Rod 展现了他的 interface21 框架,他为本身的应用编写了这一框架。这一框架被发布到开源世界后,组成了如今咱们所知的 Spring 框架的基础。算法
Spring 在早期的 beta 和发布备选版本阶段进行得很迅速,第一个正式版本 1.0 在 2004 年 3 月 24 日 发布。spring
官方: http://www.springframework.org数据库
或许解释清楚 Spring 技术究竟是什么会很困难。一般, Spring 是指一个用于构造 JAVA 应用程序的轻量级框架,但这句话包含两个有趣的地方。首先,你能够采用 Spring 来构造任何程序,这一 Apache Struts 这样的框架不一样,你不限定于只编写 WEB 应用。其次,以上解释中的“轻量级”并不意味着类数量不多,或者发行包大小很小,实际上,它指的是 Spring 哲学原理的总称——那就是最少的侵入。 Spring 是轻量级的,意味着你只需对你的程序代码作不多改动 ( 倘若有的话 ) ,而得到 Spring 核心带来的好处,你也能够在任什么时候候选择抛弃 Spring ,你会发现这实在很容易。注意,上面这句话只针对 Spring 核心自己——不少附加的 Spring 组件,好比数据访问,须要与 Spring 框架有相对紧密得多的耦合关系。可是,这些耦合带来的好处显而易见。编程
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而建立的。框架的主要优点之一就是其分层架构,分层架构容许您选择使用哪个组件,同时为 J2EE 应用程序开发提供集成的框架。设计模式
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。 Spring 模块构建在核心容器之上,核心容器定义了建立、配置和管理 bean 的方式安全
Spring 框架图:websocket
2、关于Soring历史
起点
2002 年 10 月,Rod Johnson 撰写了一本名为 Expert One-on-One J2EE 设计和开发的书。本书由 Wrox出版,介绍了当时 Java 企业应用程序开发的状况,并指出了 Java EE 和 EJB 组件框架中的存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。
在书中,他展现了如何在不使用 EJB 的状况下构建高质量,可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码。包含许多可重用的 Java 接口和类,如 ApplicationContext和BeanFactory。因为java接口是依赖注入的基本构建块,所以他将这些类的根包命名为com.interface21。
一对一的 J2EE 设计和开发一炮而红。本书免费提供的大部分基础架构代码都是高度可重用的。即便在 15 年后,本书及其原则仍然与构建高质量的 Java Web 应用程序相关。
Spring 诞生
在本书发布后不久,开发者 Juergen Hoeller 和 Yann Caroff 说服 Rod Johnson 建立一个基于基础结构代码的开源项目。Rod,Juergen 和 Yann 于 2003 年 2 月左右开始合做开发该项目 。Yann 为新框架创造了“Spring”的名字。据 Rod 介绍,Spring 是传统 J2EE 的新开始。
200 年 6 月,Spring 2.0 在 Apache 2.0 许可下发布。2004 年 3 月,1.0 版发布。有趣的是,在1.0发布以前,spring 就被开发人员普遍采用。2004 年 8 月,Rod Johnson,Juergen Hoeller,Keith Donald 和Colin Sampaleanu 共同创立了一家专一于 Spring 咨询,培训和支持的公司 interface21。
Yann Caroff 在早期离开了团队,Rod Johnson 在 2012 年离开,Juergen Hoeller 仍然是 Spring 开发团队的积极成员。
Spring 框架的快速增加
自 2004 年 1.0 版本发布以来,Spring 框架迅速发展。Spring 2.0 于 2006 年 10 月发布,到那时,Spring的下载量超过了 100 万。Spring 2.0 具备可扩展的 XML 配置功能,用于简化 XML 配置,支持 Java 5,额外的 IoC 容器扩展点,支持动态语言。
在 Rod 领导下管理 Interface21 项目于 2007 年 11 月改名为 SpringSource。同时发布了 Spring 2.5。Spring 2.5 中的主要新功能包括支持 Java 6 / Java EE 5,支持注释配置,classpath 中的组件自动检测和兼容 OSGi 的 bundle。
2007 年,SpringSource 从基准资本得到了 A 轮融资(1000万美圆)。SpringSource 在此期间收购了多家公司,如Hyperic,G2One 等。2009年8月,SpringSource 以 4.2 亿美圆被 VMWare 收购。SpringSource 在几周内收购了云代工厂,这是一家云 PaaS 提供商。2015 年,云代工厂转型成了非营利云代工厂。
2009 年 12 月,Spring 3.0 发布。Spring 3.0 具备许多重要特性,如重组模块系统,支持 Spring 表达式语言,基于 Java 的 bean 配置(JavaConfig),支持嵌入式数据库(如 HSQL,H2 和 Derby),模型验证/ REST 支持和对 Java EE 的支持。
2011 年和 2012 年发布了许多 3.x 系列的小版本。2012 年 7 月,Rod Johnson 离开了团队。2013 年 4月,VMware 和 EMC 经过 GE 投资建立了一家名为 Pivotal 的合资企业。全部的 Spring 应用项目都转移到了 Pivotal。
2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。Spring 4.0 是 Spring 框架的一大进步,它包含了对Java 8 的全面支持,更高的第三方库依赖性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),Java EE 7 支持,groovy DSL for bean 定义,对 websockets 的支持以及对泛型类型的支持做为注入 bean 的限定符。
2014 年至 2017 年期间发布了许多 Spring 框架 4.xx 系列版本。Spring 4.3.7 于 2017 年 3 月发布。Spring 4.3.8 于 2017 年 4 月发布,并成为 4.x 系列中的最后一个。Spring 框架的下一个延续的主要版本是在 5.0 版本展开。
3、关于spring的编程哲学
一切都是从Bean开始的
Spring 是面向 Bean 的编程(Bean Oriented Programming, BOP),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中做用就像 Object 对 OOP 的意义同样,Spring 中没有 Bean 也就没有 Spring 存在的意义。Spring 提供了 IoC容器经过配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转( 其中最多见的方式叫作依赖注入(Dependency Injection,DI),还有一种方式叫“依赖查找”(Dependency Lookup,DL),她在C++、Java、PHP以及.NET中都运用。在最先的Spring中是包含有依赖注入方法和依赖查询的,但由于依赖查询使用频率太低,不久就被Spring移除了,因此在Spring中控制反转也被称做依赖注入),她的基本概念是:不建立对象,可是描述建立它们的方式。在代码中不直接与对象和服务链接,但在配置文件中描述哪个组件须要哪一项服务。容器 (在 Spring 框架中是 IoC容器) 负责将这些联系在一块儿。
在典型的 IoC场景中,容器建立了全部对象,并设置必要的属性将它们链接在一块儿,决定什么时间调用方法。
Spring 总共大约有20个模块,由1300多个不一样的文件构成。而这些组件被分别整合在核心容器(Core Container)、Aop(Aspect Oriented Programming)和设备支持(Instrmentation)、数据访问及集成(Data Access/Integeration)、Web、报文发送(Messaging)、Test,6个模块集合中。
右图是 Spring 4 的系统架构图:
很好的博文推荐: