Spring是由Rob Jonson租住和开发的一个分层的JavaEE/SE一站式(full stack)轻量级开发框架,他的核心思想是控制翻转(Inversion of Control IOC)和面向切面(Aspect Oriented Programming, aop)的编程,其中IoC是Spring的基础,它支撑着Spring对Java Bean的管理功能;Aop是Spring的重要特性,AOP是通过预编译的方式和运行期间动态代理实现程序功能,即在不修改代码的情况下,为程序统一添加功能。
Spring贯穿于表现层、业务逻辑层和持久层:
在表现层提供了Spring MVC框架
在业务逻辑层可以管理事务、记录日志
在持久层可以整合MyBatis、Hibernate、JDBCTemplate等技术
Spring是模块化的,允许使用者只选择使用自己的模块, Spring 框架采用分层架构,根据不同的功能被划分成了21个模块,主要分成8大模块
1. 核心容器
Spring 的核心容器是其他模块建立的基础,在Spring的功能体系中起着支撑作用,是其它模块的基石。由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
Beans 模块
Bean模块提供了BeanFactory类,是工厂模式的经典实现,Bean模块的主要作用是创建和管理Bean对象。
Core 核心模块
封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。提供了Spring框架的基本组成部分,包括Ioc和DI
Context 上下文模块
Context 建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
SpEL 模块
SpEL(Spring Expression Language) 模块是Spring 3.0后新增的模块,提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。
2. 数据访问集成(Data Access/Integration)
数据访问/集成层包括 JDBC,ORM,OXM,JMS 和Transactions 模块,它们的细节如下:
JDBC模块
JDBC-Java Data Base Connectivity模块提供了 一个JDBC的 抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
ORM 模块
ORM-Object Relational Mapping模块提供了对流行的对象关系映射 API 的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring的其它功能整合。
OXM 模块
OXM-Object XML Mapping模块提供了对 OXM 实现的支持,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
JMS 模块
JMS-Java Messaging Serivice模块包含生产(produce)和消费(consume)消息的功能。从 Spring 4.1 开始,集成了 spring-messaging 模块。
Transactions 模块
事务模块为实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。(注:编程式事务需要自己写 beginTransaction()、commit()、rollback() 等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细)
Web模块
Web模块的实现基于ApplicationContext,它提供了Web应用的各种工具类,包括 Web-Socket,Servlet,Web和 Portlet 组成,它们的细节如下:
Web-Socket 模块
Web-Socket 模块是Spring 4.0后新增的模块,它提供了 WebSocket和SockJS的实现,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
Servlet 模块
Servlet 模块提供了Spring的模型、视图、控制器、以及Web应用程序Rest Web服务的实现。
Web模块
Web模块提供了针对Web开发的集成特性,如大部分文件上传功能等,此外,Web模块还包含一个客户端和Spring 远程处理支持的Web相关部分。
Portlet 模块
Portlet 模块的功能类似于Servlet模块,提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。
4、其他模块
还有其他一些重要的模块,像 AOP,Aspects,Instrumentation,Web 和测试模块,它们的细节如下:
AOP 模块
AOP 模块提供了面向方面(切面)的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,从而使实现功能的代码彻底的解耦出来。使用源码级的元数据,可以用类似于.Net属性的方式合并行为信息到代码中。
Aspects 模块
Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation 模块I
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
Messaging 模块
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
Test模块
测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
常用模块之间的依赖关系
spring的目录结构
https://repo.spring.io/ui/native/release/org/springframework/spring/
下载解压后由3个文件夹:docs、libs、schema
docs文件夹
该文件夹下存放Spring的相关文档,包括开发指南、API参考文档
libs文件夹
该文件夹下存放开发所需要的jar包和源码,整个spring框架由21模块组成,libs目录下spring为每个模块提供给了3个压缩包,因此,libs文件夹下共有63压缩包。这63个压缩包分为三类:
以RELEASE.jar结尾的JAR包是Spring框架的class文件
以RELEASE-javadoc.jar结尾的JAR包是Spring框架的API文档的压缩包
以RELEASE-source.jar结尾的JAR包是Spring框架的源码的压缩包
schema文件夹
该文件夹下存放spring各种配置文件的XML Schema文档
注意
在使用spring开发时,除了使用自带的jar保外,spring的核心容器还需要历来commons-logging的jar包。