springframework 介绍

本贴最后更新于 1822 天前,其中的信息可能已经时移世易

[TOC]

犹豫很久,终于鼓起勇气开始梳理 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 能帮我们做什么?

  1. 用简单方法来管理数据库事务
  2. 用本地 Java 方法来远程调用
  3. 用本地 Java 方法实现管理操作,来代替 JMX APIs
  4. 用本地 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-corespring-beansspring-contextspring-context-support,和 spring-expression(Spring 表达式语言)组成。

  1. spring-corespring-beans 模块提供了框架的基础功能,包括 IOC 和依赖注入功能。 BeanFactory 是一个成熟的工厂模式的实现。你不再需要编程去实现单例模式,允许你把依赖关系的配置和描述从程序逻辑中解耦。

  2. 上下文(spring-context)模块建立在由 Core 和 Beans 模块提供的坚实的基础上:它提供一个框架式的对象访问方式,类似于一个 JNDI 注册表。上下文模块从 Beans 模块继承其功能,并添加支持国际化(使用,例如,资源集合),事件传播,资源负载,并且透明创建上下文,例如,Servlet 容器。Context 模块还支持 Java EE 的功能,如 EJB,JMX 和基本的远程处理。ApplicationContext 接口是 Context 模块的焦点。 spring-context-support 支持整合普通第三方库到 Spring 应用程序上下文,特别是用于高速缓存(ehcache,JCache)和调度(CommonJ,Quartz)的支持。

  3. 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 的项目,例如,MessageMessageChannelMessageHandler,和其他用来传输消息的基础应用。该模块还包括一组用于将消息映射到方法的注释(annotations),类似于基于 Spring MVC 注释的编程模型。

2.2.4 数据访问/集成(Data Access/Integration)

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

  1. spring-jdbc 模块提供了一个 JDBC –抽象层,消除了需要的繁琐的 JDBC 编码和数据库厂商特有的错误代码解析。
  2. spring-tx 模块支持用于实现特殊接口和所有 POJO(普通 Java 对象)的类的编程和声明式事务 管理。
  3. spring-orm 模块为流行的对象关系映射(object-relational mapping )API 提供集成层,包括 JPA 和 Hibernate。使用 spring-orm 模块,您可以将这些 O / R 映射框架与 Spring 提供的所有其他功能结合使用,例如前面提到的简单声明性事务管理功能。
  4. spring-oxm 模块提供了一个支持对象/ XML 映射实现的抽象层,如 JAXB,Castor,JiBX 和 XStream。
  5. spring-jms 模块(Java Messaging Service) 包含用于生产和消费消息的功能。自 Spring Framework 4.1 以来,它提供了与 spring-messaging 模块的集成。

2.2.5 Web

Web 层由 spring-webspring-webmvcspring-websocket 模块组成。

  1. spring-web 模块提供基本的面向 Web 的集成功能,例如多部分文件上传功能,以及初始化一个使用了 Servlet 侦听器和面向 Web 的应用程序上下文的 IoC 容器。它还包含一个 HTTP 客户端和 Spring 的远程支持的 Web 相关部分。
  2. 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 的核心依然是 corebeancontext 三个组件。它们实现了 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

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    567 引用 • 3532 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...