Spring源码解读(一):Spring的背景起源及框架整体介绍
一、前言
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的背景起源及框架整体介绍的更多相关文章
- Spring源码-IOC部分-Spring是如何解决Bean循环依赖的【6】
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...
- Spring源码-AOP部分-Spring是如何对bean实现AOP代理的
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 历史文章 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] S ...
- Spring源码解读之BeanFactoryPostProcessor的处理
前言 前段时间旁听了某课堂两节Spring源码解析课,刚好最近自己又在重新学习中,便在这里记录一下学习所得.我之前写过一篇博文,是介绍BeanFactoryPostProcessor跟BeanPost ...
- Spring源码解读--(一)源码下载
走在Java程序员这条路上,网上Java各种工具满天飞,写个简单的CRUD,相信是个开发都能写出来,于是在思考如何可以在同行业中更有竞争力(其实就是如何赚更多钱).那么,老大给我推荐了Spring源码 ...
- 【Spring源码解读】bean标签中的属性
说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-met ...
- Spring源码解读:核心类DefaultListableBeanFactory的继承体系
1 简介 我们常用的ClassPathXmlApplicationContext是AbstractRefreshableApplicationContext的子类,而DefaultListableBe ...
- 框架源码系列六:Spring源码学习之Spring IOC源码学习
Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的 1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...
- spring源码深度解析—Spring的整体架构和环境搭建
概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...
- spring源码学习(三)--spring循环引用源码学习
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...
随机推荐
- PHP中PDO关闭连接的问题
在之前我们手写 mysql 的连接操作时,一般都会使用 mysql_close() 来进行关闭数据库连接的操作.不过在现代化的开发中,一般使用框架都会让我们忽视了底层的这些封装,而且大部分框架都已经默 ...
- ecshop商品批量上传之EC助理1.28支持ECshop2.7.3方法
目前官方随着ECShop V2.73的发布也发布了相对应的EC助理1.30版.默认EC助理1.28也支持到ECShop V2.72,要想让EC助理1.28也支持到ECShop V2.73,那要了解EC ...
- Groovy系列(4)- Groovy集合操作
Groovy集合操作 Lists List 字面值 您可以按如下所示创建列表. 请注意,[]是空列表表达式 def list = [5, 6, 7, 8] assert list.get(2) == ...
- 我是小白,做PPT像流水账,怎么做一份重点突出的PPT?
1.PPT的封面不要只写标题,还要在显眼的位置写上你的核心观点.比如,你之前做的PPT封面标题是<A产品市场前景分析>,现在不妨加上一个副标题<红海市场中需要找到更多本产品卖点> ...
- MySQL 基础入门笔记
目前我们已知的保存数据的容器有: 内存:( 数组,集合) 硬盘:(文件) 将数据从硬盘读取到内存始终是一个性能上的瓶颈 DB : 数据库 ( 保存一系列有组织的数据容器) DBMS: 数 ...
- 使用jemeter构造各种变量数据
使用手动创建测试数据太麻烦,因此考虑用jmeter写了一些创建测试数据的脚本,针对那些变量非固定的数据可以利用函数来实现 通过函数助手添加各种变量数据 Tools--->函数助手 1:生成当前时 ...
- 获取用户id的方法
/** 获取ip */function getip() { if(getenv("HTTP_X_FORWARDED_FOR")!=''){ $cip = getenv(" ...
- 鸿蒙内核源码分析(信号生产篇) | 信号安装和发送过程是怎样的? | 百篇博客分析OpenHarmony源码 | v48.03
百篇博客系列篇.本篇为: v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管 ...
- P4173-残缺的字符串【FFT】
正题 题目链接:https://www.luogu.com.cn/problem/P4173 题目大意 给出两个字符串\(S,T\),其中包含小写字母和一些\(?\),\(?\)可以匹配任何字符. 求 ...
- centos7.5离线安装Docker及容器运行报OCI runtime create failed 问题定位与解决
前言 接上篇 <记一次centos挂载ceph存储的坑> 服务器重做了centos7.5版本的操作系统,剩下就是安装docker,考虑yum安装耗时较长,我一般都是直接安装二进制版本doc ...