一、前言

Spring起源于2002年Rod Johnson写的一本书《Expert One-on-One J2EE》,书里介绍了Java企业应用程序开发情况,并指出Java EE和EJB组件框架中的一些主要缺陷,还提出了一个基于普通的Java类和依赖注入的更简单的解决方案。在书中,他展示了如何在不使用EJB的情况下构建高质量、可扩展性的在线预留座位系统。为构建应用程序,他编写了超过30,000行的基础结构代码,项目中的根包命名为com.interface21,这是Spring的前身,所以框架最初的名字叫interface21。

2003 年 Rod Johnson 和同伴在此框架的基础上开发了一个全新的框架命名为 Spring,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始,随后 Spring 发展进入快车道。

二、Spring 5.x 的模块组成

Spring Framework由大约20个模块组成的功能组成。这些模块分为核心容器,数据访问/集成,Web,AOP(面向切面​​编程),Instrumentation,消息传递和测试,如下图所示

1、Spring核心容器由spring-core, spring-beans,spring-context,spring-context-support,和spring-expression(Spring表达式语言)模块。

spring-core和spring-beans模块提供框架的基础部件,包括IOC和依赖注入特征。

上下文(spring-context)模块建立在core和beans模块基础之上的。context模块从beans模块继承其功能,并添加对国际化(例如,使用资源包),事件传播,资源加载以及通过,例如Servlet容器透明创建上下文的支持,还支持Java EE功能,例如EJB,JMX和基本远程处理。spring-context-support 提供对将常见的第三方库集成到Spring应用程序上下文中的支持,特别是对于缓存(EhCache,JCache)和调度(CommonJ,Quartz)。

spring-expression模块提供了一种功能强大的表达式语言,用于在运行时查询和操作对象图。它是JSP 2.1规范中指定的统一表达式语言(统一EL)的扩展。该语言支持设置和获取属性值,属性赋值,方法调用,访问数组,集合和索引器的内容,逻辑和算术运算符,命名变量以及从Spring的IoC容器中按名称检索对象。它还支持列表投影和选择以及常用列表聚合。

spring-aop模块提供了一个符合AOP Alliance标准的面向方面的编程实现,允许您定义,例如,方法拦截器和切入点,以干净地解耦实现应该分离的功能的代码。使用源级元数据功能,您还可以以类似于.NET属性的方式将行为信息合并到代码中。

单独的spring-aspects模块提供与AspectJ的集成。

spring-instrument模块提供了在某些应用程序服务器中使用的类检测支持和类加载器实现。

spring-messaging从关键抽象模块 Spring集成项目,例如Message,MessageChannel,MessageHandler,和其他人作为基于消息的应用奠定了基础。

2、数据访问/集成层由JDBC,ORM,OXM,JMS和事务模块组成。

spring-jdbc模块提供了一个JDBC抽象层,无需进行繁琐的JDBC编码和解析数据库供应商特定的错误代码。

spring-tx模块支持对实现特殊接口的类和所有POJO的类进行编程和声明式事务管理。

spring-orm模块为流行的对象关系映射API提供了集成层,包括JPA和Hibernate。使用spring-orm模块,您可以将这些O / R映射框架与Spring提供的所有其他功能结合使用,例如前面提到的简单声明式事务管理功能。

spring-oxm模块提供了一个抽象层,支持对象/ XML映射实现,如JAXB,Castor,JiBX和XStream。

spring-jms模块(Java Messaging Service)包含用于生成和使用消息的功能。 从Spring Framework 4.1开始,它提供了与spring-messaging模块的集成。

3、Web层由spring-web,spring-webmvc和spring-websocket模块组成。

spring-web模块提供基本的面向Web的集成功能,例如多部分文件上载功能以及使用Servlet侦听器和面向Web的应用程序上下文初始化IoC容器。 它还包含一个HTTP客户端以及Spring的远程支持的Web相关部分。

spring-webmvc模块(也称为Web-Servlet模块)包含Spring的模型 - 视图 - 控制器(MVC)和用于Web应用程序的REST Web服务实现。 Spring的MVC框架提供了域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成在一起。

4、Spring测试模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。 它提供Spring ApplicationContexts的一致加载和这些上下文的缓存。 它还提供了可用于独立测试代码的模拟对象。

使用场景:

1、典型的完整Spring Web应用程序

2、使用第三方Web框架的Spring中间层

3、Remoting使用场景

4、EJB - 包装现有的POJO

以上说明来源于Spring官方文档。

以下是SpringFramework的所有模块:

Spring源码解读(一):Spring的背景起源及框架整体介绍的更多相关文章

  1. Spring源码-IOC部分-Spring是如何解决Bean循环依赖的【6】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  2. Spring源码-AOP部分-Spring是如何对bean实现AOP代理的

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 历史文章 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] S ...

  3. Spring源码解读之BeanFactoryPostProcessor的处理

    前言 前段时间旁听了某课堂两节Spring源码解析课,刚好最近自己又在重新学习中,便在这里记录一下学习所得.我之前写过一篇博文,是介绍BeanFactoryPostProcessor跟BeanPost ...

  4. Spring源码解读--(一)源码下载

    走在Java程序员这条路上,网上Java各种工具满天飞,写个简单的CRUD,相信是个开发都能写出来,于是在思考如何可以在同行业中更有竞争力(其实就是如何赚更多钱).那么,老大给我推荐了Spring源码 ...

  5. 【Spring源码解读】bean标签中的属性

    说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-met ...

  6. Spring源码解读:核心类DefaultListableBeanFactory的继承体系

    1 简介 我们常用的ClassPathXmlApplicationContext是AbstractRefreshableApplicationContext的子类,而DefaultListableBe ...

  7. 框架源码系列六:Spring源码学习之Spring IOC源码学习

    Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的  1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...

  8. spring源码深度解析—Spring的整体架构和环境搭建

    概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  9. spring源码学习(三)--spring循环引用源码学习

    在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...

随机推荐

  1. Linux RHCE7.0 笔记(常见符号)

    1.无交互式创建用户 echo "password" | passwd --stdin username 2.Linux重定向符号 > :表示将符号左侧的内容,以覆盖的方式输 ...

  2. 创建一个People类型,有年龄、工资、性别三个属性。 定义一个方法叫做找对象,找对象方法传过来一个人;

    创建一个People类型,有年龄.工资.性别三个属性. 定义一个方法叫做找对象,找对象方法传过来一个人: 首先如果性别相同,就输出"我不是同性恋", 如果对方是男的,年龄小于28, ...

  3. C++快速读入

    使用C++的标准cin进行读入速度比较慢,尤其是在大数据的情况下,所以我们需要使用一种方法,按照字符读入,最后再"组装"成整数.由于字符读入比数字要快,所以这样做可以提高读入速度. ...

  4. whistle安装

    可参考官方帮助文档:https://wproxy.org/whistle/install.html 系统:windows10   jdk:1.8.0_171    node:10.16.0    np ...

  5. 关于URL encode和parse

    from urllib import parses = 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu& ...

  6. Go语言之函数

    函数就是一块执行特定任务的代码,在输入源的基础上通过一些算法生成预期的输出. 一.函数的声明 Go 语言中的函数声明语法如下: func 函数名(参数名 类型,参数名 类型)(返回值1类型,返回值2类 ...

  7. redux搭配react-redux进行跨组件通信开发

    Redux API 作用 createStore 用于创建一个store对象 bindActionCreators 用于简化操作,不用开发者手动触发dispatch React-redux API 作 ...

  8. js 判断一个变量是否有值

    最近遇到一个面试题,判断一个变量是否有值,当时有点蒙,其实很简单,就是判断 变量是否为 undefined或者null function isFlag(val) { if(Object.prototy ...

  9. 高级爬虫面试题测试题 v1.3

    Python Web高级爬虫工程师测试题 (请本文件发送到: SpiderTestQuestion@163.com 并附带简历) 1. 用yield写一个斐波那契数列的生成器函数. 2. 放一段scr ...

  10. 题解 [ZJOI2019]语言

    题目传送门 题目大意 给出一个 \(n\) 个点的树,现在有 \(m\) 次操作,每次可以选择一个链 \(s,t\),,然后这条链上每个点都会增加一个相同属性,问对于每一个点有与它相同属性的有多少个点 ...