犹豫很久,终于鼓起勇气开始梳理spring的体系。
1. 什么是springframework?
先来看看wiki的解释
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,并且Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。
官方文档的解释更明确些:
Spring 框架是一个Java平台,它为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此您可以专注于应用程序的开发。Spring可以让您从“plain old Java objects”(POJO)中构建应用程序和通过非侵入性的POJO实现企业应用服务。此功能适用于Java SE的编程模型,全部的或部分的适应Java EE模型。
综上,我们知道spring是springframework的简称,它帮助开发者快速完成开发中的通用步骤,开发者只需要关注与应用开发相关的部分,大大的提高了开发效率。
Spring能帮我们做什么?
- 用简单方法来管理数据库事务
- 用本地Java方法来远程调用
- 用本地Java方法实现管理操作,来代替JMX APIs
- 用本地Java方法实现消息处理,来代替JMS APIs
2. springframework包括哪些模块
2.1 框架
官网上能找到的最早的spring框架图如下
spring1.1.2框架图
这就是流传最广的7大模块的出处了。现在spring已经发展到了spring5,模块的划分进行了调整,已经和第一版有些调整了。
Spring5框架图
那么我们直接来看新的版本。
2.2 模块
在spring5中,Spring框架的功能被有组织的分散到约20个模块中。这些模块分布在核心容器(Core Container,),数据访问/集成(Data Access/Integration),Web,AOP(Aspect Oriented Programming,面向切面 的编程),植入(Instrumentation),消息传输(Messaging)和测试(Test)7个项目中。
下面对每个模块进行一一介绍(来自官网文档的中文版搬运)
2.2.1 核心容器Core Container
由spring-core
, spring-beans
,spring-context
,spring-context-support
,和spring-expression
(Spring表达式语言)组成。
-
spring-core
和spring-beans
模块提供了框架的基础功能,包括IOC和依赖注入功能。 BeanFactory是一个成熟的工厂模式的实现。你不再需要编程去实现单例模式,允许你把依赖关系的配置和描述从程序逻辑中解耦。 - 上下文(
spring-context
)模块建立在由Core和Beans模块提供的坚实的基础上:它提供一个框架式的对象访问方式,类似于一个JNDI注册表。上下文模块从Beans模块继承其功能,并添加支持国际化(使用,例如,资源集合),事件传播,资源负载,并且透明创建上下文,例如,Servlet容器。Context模块还支持Java EE的功能,如EJB,JMX和基本的远程处理。ApplicationContext接口是Context模块的焦点。spring-context-support
支持整合普通第三方库到Spring应用程序上下文,特别是用于高速缓存(ehcache,JCache)和调度(CommonJ,Quartz)的支持。
-
spring-expression
模块提供了强大的表达式语言去支持查询和操作运行时对象图。这是对JSP 2.1规范中规定的统一表达式语言(unified EL)的扩展。该语言支持设置和获取属性值,属性分配,方法调用,访问数组,集合和索引器的内容,逻辑和算术运算,变量命名以及从Spring的IoC容器中以名称检索对象。 它还支持列表投影和选择以及常见的列表聚合。
2.2.2 AOP和Instrumentation
spring-aop
模块提供了一个符合AOP联盟(要求)的面向方面的编程实现,例如,允许您定义方法拦截器和切入点(pointcuts),以便干净地解耦应该被分离的功能实现。 使用源级元数据(source-level metadata)功能,您还可以以类似于.NET属性的方式将行为信息合并到代码中。
单独的spring-aspects
模块,提供了与AspectJ的集成。
spring-instrument
模块提供了类植入(instrumentation)支持和类加载器的实现,可以应用在特定的应用服务器中。该spring-instrument-tomcat
模块包含了支持Tomcat的植入代理。
2.2.3消息(Messaging)
Spring框架4包括spring-messaging
(消息传递模块),其中包含来自Spring Integration
的项目,例如,Message
,MessageChannel
,MessageHandler
,和其他用来传输消息的基础应用。该模块还包括一组用于将消息映射到方法的注释(annotations),类似于基于Spring MVC注释的编程模型。
2.2.4数据访问/集成(Data Access/Integration)
数据访问/集成层由JDBC,ORM,OXM,JMS和事务模块组成。
-
spring-jdbc
模块提供了一个JDBC –抽象层,消除了需要的繁琐的JDBC编码和数据库厂商特有的错误代码解析。 -
spring-tx
模块支持用于实现特殊接口和所有POJO(普通Java对象)的类的编程和声明式事务 管理。 -
spring-orm
模块为流行的对象关系映射(object-relational mapping )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
模块的集成。
2.2.5 Web
Web层由spring-web
,spring-webmvc
和spring-websocket
模块组成。
-
spring-web
模块提供基本的面向Web的集成功能,例如多部分文件上传功能,以及初始化一个使用了Servlet侦听器和面向Web的应用程序上下文的IoC容器。它还包含一个HTTP客户端和Spring的远程支持的Web相关部分。 -
spring-webmvc
模块(也称为Web-Servlet模块)包含用于Web应用程序的Spring的模型-视图-控制器(MVC)和REST Web Services实现。Spring的MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。
2.2.6测试(Test)
spring-test
模块支持使用JUnit或TestNG对Spring组件进行单元测试和 集成测试。它提供了Spring ApplicationContexts的一致加载和这些上下文的缓存。它还提供可用于独立测试代码的模仿(mock)对象。
2.3 总结
spring的核心依然是core
、bean
和context
三个组件。它们实现了spring非常核心的功能:依赖注入和控制反转,这个功能可以将对象之间的依赖关系用配置文件管理起来。这三个组件构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。
后面的文章中,我们会先从这三个模块入手,对spring进行介绍和分析。
参考文档
wiki百科
https://zh.wikipedia.org/wiki/Spring_Framework
官方文档
https://docs.spring.io/spring/docs/5.0.0.M5/spring-framework-reference/html/overview.html
中文版
https://lfvepclr.gitbooks.io/spring-framework-5-doc-cn/content/2/2.html
本文链接:https://blog.goodfun.me/articles/2019/11/26/1574762483313.html
本作品由 IvyWooo 采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可,转载请注明出处。
网友评论