乐趣区

关于spring:Spring框架系列1-Spring和Spring框架组成

Spring 是什么?它是怎么诞生的?有哪些次要的组件和外围性能呢? 本文通过这几个问题帮忙你构筑 Spring 和 Spring Framework 的整体认知。@pdai

  • Spring 框架系列(1) – Spring 和 Spring 框架组成

    • 什么是 Spring?

      • Spring 的起源
      • Spring 的个性和劣势
    • Spring 有哪些组件?

      • Core Container(Spring 的外围容器)
      • Data Access/Integration(数据拜访/集成)
      • Web 模块
      • AOP、Aspects、Instrumentation 和 Messaging
      • Test 模块
    • 为什么用 Spring?
    • 学习 Spring 时参考哪些材料呢?

      • Spring 的官网我的项目和教程
      • Spring 的归档文档
      • Spring 的官网 Github
    • 更多文章

什么是 Spring?

首先,Spring 是什么?它是怎么诞生的?它的诞生是为了解决什么问题?@pdai

Spring 的起源

百度百科中对于 Spring 的起源介绍如下:

要谈 Spring 的历史,就要先谈 J2EE。J2EE 应用程序的宽泛实现是在 1999 年和 2000 年开始的,它的呈现带来了诸如事务管理之类的 外围中间层概念的标准化 ,然而在实践中并没有取得相对的胜利,因为 开发效率 ,开发难度和理论的 性能 都令人悲观。

已经应用过 EJB 开发 JAVA EE 利用的人,肯定晓得,在 EJB 开始的学习和利用十分的艰辛,很多货色都不能一下子就很容易的了解。EJB 要严格地实现各种不同类型的接口,相似的或者反复的代码大量存在。而配置也是简单和枯燥,同样应用 JNDI 进行对象查找的代码也是枯燥而干燥。尽管有一些开发工作随着 xdoclet 的呈现,而有所缓解,然而学习 EJB 的昂扬代价,和极低的开发效率,极高的资源耗费,都造成了 EJB 的应用艰难。而 Spring 呈现的初衷就是为了解决相似的这些问题。

Spring 的一个最大的目标就是使 JAVA EE 开发更加容易 。同时,Spring 之所以与 Struts、Hibernate 等单层框架不同,是因为 Spring 致力于提供一个以对立的、高效的形式结构整个利用,并且能够将单层框架以最佳的组合揉和在一起建设一个连贯的体系。能够说 Spring 是一个提供了更欠缺开发环境的一个框架,能够为 POJO(Plain Ordinary Java Object) 对象提供企业级的服务。

Spring 的造成,最后来自 Rod Jahnson 所著的一本很有影响力的书籍《Expert One-on-One J2EE Design and Development》,就是在这本书中第一次呈现了 Spring 的一些核心思想,该书出版于 2002 年。

Spring 的个性和劣势

Spring Framework 有哪些个性,用了这个框架对开发而言有什么益处呢?

从 Spring 框架的 个性 来看:

  • 非侵入式:基于 Spring 开发的利用中的对象能够不依赖于 Spring 的 API
  • 管制反转:IOC——Inversion of Control,指的是将对象的创立权交给 Spring 去创立。应用 Spring 之前,对象的创立都是由咱们本人在代码中 new 创立。而应用 Spring 之后。对象的创立都是给了 Spring 框架。
  • 依赖注入:DI——Dependency Injection,是指依赖的对象不须要手动调用 setXX 办法去设置,而是通过配置赋值。
  • 面向切面编程:Aspect Oriented Programming——AOP
  • 容器:Spring 是一个容器,因为它蕴含并且治理利用对象的生命周期
  • 组件化:Spring 实现了应用简略的组件配置组合成一个简单的利用。在 Spring 中能够应用 XML 和 Java 注解组合这些对象。
  • 一站式:在 IOC 和 AOP 的根底上能够整合各种企业应用的开源框架和优良的第三方类库(实际上 Spring 本身也提供了体现层的 SpringMVC 和长久层的 Spring JDBC)

从应用 Spring 框架的 益处 看:

  • Spring 能够使开发人员应用 POJOs 开发企业级的应用程序。只应用 POJOs 的益处是你不须要一个 EJB 容器产品,比方一个应用程序服务器,然而你能够抉择应用一个强壮的 servlet 容器,比方 Tomcat 或者一些商业产品。
  • Spring 在一个单元模式中是有组织的。即便包和类的数量十分大,你只有放心你须要的,而其它的就能够疏忽了。
  • Spring 不会让你白费力气做反复工作,它真正的利用了一些现有的技术,像 ORM 框架、日志框架、JEE、Quartz 和 JDK 计时器,其余视图技术。
  • 测试一个用 Spring 编写的应用程序很容易,因为环境相干的代码被挪动到这个框架中。此外,通过应用 JavaBean-style POJOs,它在应用依赖注入注入测试数据时变得更容易。
  • Spring 的 web 框架是一个设计良好的 web MVC 框架,它为比方 Structs 或者其余工程上的或者不怎么受欢迎的 web 框架提供了一个很好的供代替的抉择。MVC 模式导致应用程序的不同方面 (输出逻辑,业务逻辑和 UI 逻辑) 拆散,同时提供这些元素之间的涣散耦合。模型 (Model) 封装了应用程序数据,通常它们将由 POJO 类组成。视图 (View) 负责渲染模型数据,一般来说它生成客户端浏览器能够解释 HTML 输入。控制器 (Controller) 负责解决用户申请并构建适当的模型,并将其传递给视图进行渲染。
  • Spring 对 JavaEE 开发中十分难用的一些 API(JDBC、JavaMail、近程调用等),都提供了封装,使这些 API 利用难度大大降低。
  • 轻量级的 IOC 容器往往是轻量级的,例如,特地是当与 EJB 容器相比的时候。这有利于在内存和 CPU 资源无限的计算机上开发和部署应用程序。
  • Spring 提供了统一的事务管理接口,可向下扩大到(应用一个繁多的数据库,例如)本地事务并扩大到全局事务(例如,应用 JTA)

Spring 有哪些组件?

Spring Framework 有哪些组件呢?

下图来自,官网文档 Spring-framework 5.0;须要留神的是,尽管这个图来源于 Spring Framwork5.0 M4 版本,然而它仍然是 V4 版本的图,比方 Spring 5 版本中的 web 模块曾经去掉了 Portlet 模块,新增了WebFlux 模块 等。

上图中蕴含了 Spring 框架的所有模块,这些模块能够满足所有企业级利用开发的需要,在开发过程中能够依据需要有选择性地应用所须要的模块。上面别离对这些模块的作用进行简略介绍(并且联合 SpringFramework5.x 源码模块帮忙你对应好各模块关系)。

Core Container(Spring 的外围容器)

Spring 的外围容器是其余模块建设的根底,由 Beans 模块、Core 外围模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些外围容器,也不可能有 AOP、Web 等下层的性能。具体介绍如下。

  • Beans 模块:提供了框架的根底局部,包含管制反转和依赖注入。
  • Core 外围模块:封装了 Spring 框架的底层局部,包含资源拜访、类型转换及一些常用工具类。
  • Context 上下文模块:建设在 Core 和 Beans 模块的根底之上,集成 Beans 模块性能并增加资源绑定、数据验证、国际化、Java EE 反对、容器生命周期、事件流传等。ApplicationContext 接口是上下文模块的焦点。
  • SpEL 模块:提供了弱小的表达式语言反对,反对拜访和批改属性值,办法调用,反对拜访及批改数组、容器和索引器,命名变量,反对算数和逻辑运算,反对从 Spring 容器获取 Bean,它也反对列表投影、抉择和个别的列表聚合等。

对应的源码模块如下:

Data Access/Integration(数据拜访/集成)

数据拜访/集成层包含 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

  • JDBC 模块:提供了一个 JBDC 的样例模板,应用这些模板能打消传统简短的 JDBC 编码还有必须的事务管制,而且能享受到 Spring 治理事务的益处。
  • ORM 模块:提供与风行的“对象 - 关系”映射框架无缝集成的 API,包含 JPA、JDO、Hibernate 和 MyBatis 等。而且还能够应用 Spring 事务管理,无需额定管制事务。
  • OXM 模块:提供了一个反对 Object /XML 映射的形象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将 XML 数据映射成 Java 对象。
  • JMS 模块:指 Java 音讯服务,提供一套“音讯生产者、音讯消费者”模板用于更加简略的应用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送音讯,进行异步通信。
  • Transactions 事务模块:反对编程和申明式事务管理。

对应的源码模块如下:

Web 模块

Spring 的 Web 层包含 Web、Servlet、WebSocket 和 Webflux 组件,具体介绍如下。

  • Web 模块:提供了根本的 Web 开发集成个性,例如多文件上传性能、应用的 Servlet 监听器的 IOC 容器初始化以及 Web 利用上下文。
  • Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的申请资源注入、更简略的数据绑定、数据验证等及一套十分易用的 JSP 标签,齐全无缝与 Spring 其余技术协作。
  • WebSocket 模块:提供了简略的接口,用户只有实现响应的接口就能够疾速的搭建 WebSocket Server,从而实现双向通信。
  • Webflux 模块:Spring WebFlux 是 Spring Framework 5.x 中引入的新的响应式 web 框架。与 Spring MVC 不同,它不须要 Servlet API,是齐全异步且非阻塞的,并且通过 Reactor 我的项目实现了 Reactive Streams 标准。Spring WebFlux 用于创立基于事件循环执行模型的齐全异步且非阻塞的应用程序。

此外 Spring4.x 中还有 Portlet 模块,在 Spring 5.x 中曾经移除

  • Portlet 模块:提供了在 Portlet 环境中应用 MVC 实现,相似 Web-Servlet 模块的性能。

对应的源码模块如下:

AOP、Aspects、Instrumentation 和 Messaging

在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:

  • AOP 模块:提供了面向切面编程实现,提供比方日志记录、权限管制、性能统计等通用性能和业务逻辑拆散的技术,并且能动静的把这些性能增加到须要的代码中,这样各司其职,升高业务逻辑和通用性能的耦合。
  • Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
  • Instrumentation 模块:提供了类工具的反对和类加载器的实现,能够在特定的应用服务器中应用。
  • messaging 模块:Spring 4.0 当前新增了音讯(Spring-messaging)模块,该模块提供了对消息传递体系结构和协定的反对。
  • jcl 模块:Spring 5.x 中新增了日志框架集成的模块。

对应的源码模块如下:

Test 模块

Test 模块:Spring 反对 Junit 和 TestNG 测试框架,而且还额定提供了一些基于 Spring 的测试性能,比方在测试 Web 框架时,模仿 Http 申请的性能。

蕴含 Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。

对应的源码模块如下:

为什么用 Spring?

那么为什么用 Spring 呢?来看看官网对这个问题的答复

最重要的体现在它能做什么,这是 Spring 的外围所在

且官网对此专门对此做了具体介绍,感兴趣能够看下

学习 Spring 时参考哪些材料呢?

十分负责任的通知你,最好最全的材料在 Spring 的官网,Spring 能成为最次要的企业开发框架,文档和生态体系也做的很好;这里介绍下如何获取官网的学习资源。@pdai

Spring 的官网我的项目和教程

官网的我的项目和教程,地址在这里,在学习 Spring 时,肯定要把它当做生态体系,而是不是一个简略的开发框架。

Spring 的归档文档

官网提供了系统性的文档的 FTP,你能够在这里找到所有历史版本的 PDF/HTML 版本。

能够看到很多系统性的文档,包含下面援用的图,

Spring 的官网 Github

Spring 官网的 GitHub 在这里,它蕴含着 Spring-framework 的源码,如果你感兴趣,能够从这里 clone 代码进行浏览。

更多文章

首先,从 Spring 框架的整体架构和组成对整体框架有个认知。

  • Spring 根底 – Spring 和 Spring 框架组成

    • Spring 是什么?它是怎么诞生的?有哪些次要的组件和外围性能呢? 本文通过这几个问题帮忙你构筑 Spring 和 Spring Framework 的整体认知。

其次,通过案例引出 Spring 的外围(IoC 和 AOP),同时对 IoC 和 AOP 进行案例应用剖析。

  • Spring 根底 – Spring 简略例子引入 Spring 的外围

    • 上文中咱们简略介绍了 Spring 和 Spring Framework 的组件,那么这些 Spring Framework 组件是如何配合工作的呢?本文次要承接上文,向你展现 Spring Framework 组件的典型利用场景和基于这个场景设计出的简略案例,并以此引出 Spring 的外围要点,比方 IOC 和 AOP 等;在此基础上还引入了不同的配置形式,如 XML,Java 配置和注解形式的差别。
  • Spring 根底 – Spring 外围之管制反转(IOC)

    • 在 Spring 根底 – Spring 简略例子引入 Spring 的外围中向你展现了 IoC 的根底含意,同时以此发散了一些 IoC 相干知识点; 本节将在此基础上进一步解读 IOC 的含意以及 IOC 的应用形式
  • Spring 根底 – Spring 外围之面向切面编程(AOP)

    • 在 Spring 根底 – Spring 简略例子引入 Spring 的外围中向你展现了 AOP 的根底含意,同时以此发散了一些 AOP 相干知识点; 本节将在此基础上进一步解读 AOP 的含意以及 AOP 的应用形式。

基于 Spring 框架和 IOC,AOP 的根底,为构建下层 web 利用,须要进一步学习 SpringMVC。

  • Spring 根底 – SpringMVC 申请流程和案例

    • 前文咱们介绍了 Spring 框架和 Spring 框架中最为重要的两个技术点(IOC 和 AOP),那咱们如何更好的构建下层的利用呢(比方 web 利用),这便是 SpringMVC;Spring MVC 是 Spring 在 Spring Container Core 和 AOP 等技术根底上,遵循上述 Web MVC 的标准推出的 web 开发框架,目标是为了简化 Java 栈的 web 开发。本文次要介绍 SpringMVC 的申请流程和根底案例的编写和运行。

Spring 进阶 – IoC,AOP 以及 SpringMVC 的源码剖析

  • Spring 进阶 – Spring IOC 实现原理详解之 IOC 体系结构设计

    • 在对 IoC 有了初步的认知后,咱们开始对 IOC 的实现原理进行深刻了解。本文将帮忙你站在设计者的角度去看 IOC 最顶层的结构设计
  • Spring 进阶 – Spring IOC 实现原理详解之 IOC 初始化流程

    • 上文,咱们看了 IOC 设计要点和设计构造;紧接着这篇,咱们能够看下源码的实现了:Spring 如何实现将资源配置(以 xml 配置为例)通过加载,解析,生成 BeanDefination 并注册到 IoC 容器中的
  • Spring 进阶 – Spring IOC 实现原理详解之 Bean 实例化(生命周期, 循环依赖等)

    • 上文,咱们看了 IOC 设计要点和设计构造;以及 Spring 如何实现将资源配置(以 xml 配置为例)通过加载,解析,生成 BeanDefination 并注册到 IoC 容器中的;容器中寄存的是 Bean 的定义即 BeanDefinition 放到 beanDefinitionMap 中,实质上是一个ConcurrentHashMap<String, Object>;并且 BeanDefinition 接口中蕴含了这个类的 Class 信息以及是否是单例等。那么如何从 BeanDefinition 中实例化 Bean 对象呢,这是本文次要钻研的内容?
  • Spring 进阶 – Spring AOP 实现原理详解之切面实现

    • 前文,咱们剖析了 Spring IOC 的初始化过程和 Bean 的生命周期等,而 Spring AOP 也是基于 IOC 的 Bean 加载来实现的。本文次要介绍 Spring AOP 原理解析的切面实现过程(将切面类的所有切面办法依据应用的注解生成对应 Advice,并将 Advice 连同切入点匹配器和切面类等信息一并封装到 Advisor,为后续交给代理加强实现做筹备的过程)。
  • Spring 进阶 – Spring AOP 实现原理详解之 AOP 代理

    • 上文咱们介绍了 Spring AOP 原理解析的切面实现过程(将切面类的所有切面办法依据应用的注解生成对应 Advice,并将 Advice 连同切入点匹配器和切面类等信息一并封装到 Advisor)。本文在此基础上持续介绍,代理(cglib 代理和 JDK 代理)的实现过程。
  • Spring 进阶 – Spring AOP 实现原理详解之 Cglib 代理实现

    • 咱们在前文中曾经介绍了 SpringAOP 的切面实现和创立动静代理的过程,那么动静代理是如何工作的呢?本文次要介绍 Cglib 动静代理的案例和 SpringAOP 实现的原理。
  • Spring 进阶 – Spring AOP 实现原理详解之 JDK 代理实现

    • 上文咱们学习了 SpringAOP Cglib 动静代理的实现,本文次要是 SpringAOP JDK 动静代理的案例和实现局部。
  • Spring 进阶 – SpringMVC 实现原理之 DispatcherServlet 初始化的过程

    • 前文咱们有了 IOC 的源码根底以及 SpringMVC 的根底,咱们便能够进一步深刻了解 SpringMVC 次要实现原理,蕴含 DispatcherServlet 的初始化过程和 DispatcherServlet 解决申请的过程的源码解析。本文是第一篇:DispatcherServlet 的初始化过程的源码解析。
  • Spring 进阶 – SpringMVC 实现原理之 DispatcherServlet 解决申请的过程

    • 前文咱们有了 IOC 的源码根底以及 SpringMVC 的根底,咱们便能够进一步深刻了解 SpringMVC 次要实现原理,蕴含 DispatcherServlet 的初始化过程和 DispatcherServlet 解决申请的过程的源码解析。本文是第二篇:DispatcherServlet 解决申请的过程的源码解析。
退出移动版