zoukankan      html  css  js  c++  java
  • week 6 Spring history and design philosophy

    一、前言

    Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一。它目前由大量提供一系列服务的模块组成。包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类。Spring 框架的所有组件都通过依赖注入粘在一起。依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易。

    多年来 Spring 框架已变得足够成熟。几乎所有 Java 企业应用需要用到的基础组件都可以在 Spring 框架中找到。但在一个新应用中将所有需要的 Spring 组件整合并配置好并不容易。这包括在 gradle/maven 中设置依赖库,使用 xml、注解或 java 代码配置需要的 Spring Bean。Spring 开发者意识到这里的绝大多数工作是可以可以自动化的,Spring Boot 出现了!

    (1) 春天来了—— Spring 来了!

    Spring 在起源可以回溯到 Rod Johnson 编写的“ Expert One-to-One J2EE Design and Development ”一书 (Wrox , 2002) 。在这本书中, Rod 展示了他的 interface21 框架,他为自己的应用编写了这一框架。这一框架被发布到开源世界后,组成了现在我们所知的 Spring 框架的基础。

    Spring 在早期的 beta 和发布备选版本阶段进行得很迅速,第一个正式版本 1.0 在 2004 年 3 月 24 日 发布。

    官方: http://www.springframework.org

    (2)What Is Spring(Spring 是什么 ) ?

    或许解释清楚 Spring 技术到底是什么会很困难。通常, Spring 是指一个用于构造 JAVA 应用程序的轻量级框架,但这句话包含两个有趣的地方。首先,你可以采用 Spring 来构造任何程序,这一 Apache Struts 这样的框架不同,你不限定于只编写 WEB 应用。其次,以上解释中的“轻量级”并不意味着类数量很少,或者发行包大小很小,实际上,它指的是 Spring 哲学原理的总称——那就是最少的侵入。 Spring 是轻量级的,意味着你只需对你的程序代码做很少改动 ( 假若有的话 ) ,而获得 Spring 核心带来的好处,你也可以在任何时候选择抛弃 Spring ,你会发现这实在很容易。注意,上面这句话只针对 Spring 核心本身——很多附加的 Spring 组件,比如数据访问,需要与 Spring 框架有相对紧密得多的耦合关系。但是,这些耦合带来的好处显而易见。

    Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

    (3)Spring 的体系结构

    Spring 框架是一个分层架构,由 7 个定义良好的模块组成。 Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式

    Spring 框架图:

    二、关于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 版本展开。

     Spring 时间线图表

     

     三、关于spring的编程哲学

    一切都是从Bean开始的

    面向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 的系统架构图:

    •  其实面向对象的思想,并不是只属于 面向对象语言,在面向过程的理由也用到这种思想,里面的构件,结构 都可以理解为 对象,其实我们在考虑 任何事物的时候都是把它当做对象(事物)来考虑,所以面向对象的思想不是 OOP语言的 专属。
    •  pring体系的核心是IoC和Aop模块。对于kernel而言,进程调度器就是其关键部位,kernel通过“进程”这个概念来抽象物理的计算资源,同时通过调度算法的设计来实现对计算资源的高效使用。而对于Spring来说,也是一样的,一方面通过IoC容器来进行POJO对象管理,以及对他们进行松耦合处理,同时也让信息资源可以用最简单的Java 语言来抽象和描述;另一方面,可以通过Aop来增强服务的功能。
    •  你可以把Spring 中的 IOC和AOP模块 比作操作系统的 Kernel,对于操作系统的Kernel来说,进度调度器的设计是关键部分,通过进程调度器,一方面 使用 "进程"(比作 Spring中的Bean)这个概念来抽象物理的计算资源,另一方面,可以通过调度算法的设计来实现对计算机资源的高效使用。对Spring来说也是一样的,一方面它通过IOC容器来管理Bean对象,以及它们相互之间的耦合关系,使企业的信息(数据)资源可以用简单的Java语言来抽象和描述;另一方面,可以通过AOP,以动态和非侵入的方式来增强服务的功能。当然 操作系统光有一个 Kernel 是不行的,我们还需要安装显卡驱动,鼠标和键盘驱动等驱动来驱动设备以方便我们的使用,这就好比Spring里面的事务处理,Web MVC, JDBC,ORM远端调用等。
    •  另外,在Spring体系中,Spring简化了Java EE所进行的开发,这种简化是指我们能够在不EJB这么厚重的环境中使用Java EE的基本服务——为应用开发服务提供了许多即开即用的系统组件合服务,这些服务涵盖了Java EE各个基本服务,对于其他的服务,也可以根据使用情况动态扩展到Spring体系中。基本来说,Spring体系中已经涵盖了Java EE中经常用到的许多服务,比如事务处理、Web MVC、JDBC、ORM、远程调用,这些服务的价值是不可忽视的,就像kernel如果没有实现许多驱动,那Linux对用户而言也是没有任何价值的。Spring通过自己的努力,提供了这些看起来不起眼,但对推广起着关键作用的部分,从而构建起了一个丰富的生态圈。其实,这也是interface21和Spring之间的区别。
    •  和Linux一样,作为一个开源项目。其开源的特性也深深影响了Spring体系的设计,在发展的过程中,其自身也吸收了不少好的社区项目,比如Spring的Security框架就是来源于社区Acegi,这个框架的原意是为Spring设计一个安全框架,让Spring应用更方便地处理一些安全性的问题,但慢慢的被Spring吸收,成为Spring的一个子项目。

     

    很好的博文推荐

    深入浅出,了解 Spring 框架和 Spring Boot 的历史

    从编程哲学到开发应用:Spring的初步应用

    Spring 的骨骼架构

    Spring 框架的设计理念与设计模式分析

  • 相关阅读:
    Python中yield和yield from区别
    Python基础05编码问题
    Python eval()函数
    Python异常大全
    Python基础08 内置函数
    Python os和sys模块基本操作
    git学习(3)-本地标签管理
    ubuntu 安装 node 以及升级更新到最新版本
    git学习(2)-分支管理
    git学习(1)-git基础
  • 原文地址:https://www.cnblogs.com/EST-woah/p/10666345.html
Copyright © 2011-2022 走看看