Spring:概览

本文内容基于Version 6.0.8-SNAPSHOT

Spring Framework 是一个功能强大的 Java 语言框架,旨在提供高效且可扩展的开发环境。结合轻量级的容器和依赖注入,提供了 POJO 进行容器配置和面向切面的编程的简单方法,以及一组用于AOP的模块。Spring 框架还支持各种移动应用开发技术,如 Android 和 iOS。此外,它还提供了对事务管理、对象/关系映射、JavaBeans、JDBC、JMS 和其他技术的支持,从而确保高效开发。

功能模块

Spring 框架提供了大约 20 个模块

  • Core:IoC容器、事件、资源、i18n、 校验、数据绑定、类型转换、SpEL、AOP、AOT。
  • Testing:Mock对象、TestContext框架、Spring MVC测试、WebTestClient。
  • Data Access:事务、DAO支持、JDBC、R2DBC、O/R映射、XML装载。
  • Web Servlet:Spring MVC、 WebSocket、 SockJS、 STOMP Messaging。
  • Web Reactive:Spring WebFlux、 WebClient、 WebSocket、 RSocket。
  • Integration:REST Clients、 JMS、 JCA、 JMX、 邮件、 Tasks、 Scheduling、 缓存、 Observability。
  • Languages:Kotlin、 Groovy、 动态语言。

Core 容器

Core 容器由 Core、Beans、Context 和 Expression Language 模块组成,详细信息如下

  • Core 模块提供了框架的基本部分,包括 IoC 和依赖注入功能。
  • Bean 模块提供了 BeanFactory,它是工厂模式的一个复杂的实现。
  • Context 模块建立在 Core 和 Beans 模块提供的坚实基础之上,它是访问任何已定义和配置的对象的媒介。 ApplicationContext 接口是上下文模块的焦点。
  • SpEL 模块提供了一种强大的表达式语言,用于在运行时查询和操作对象图。

数据访问/集成

数据访问/集成层由 JDBC、ORM、OXM、JMS 和 Transaction 事务模块组成,详细信息如下

  • JDBC 模块提供了一个 JDBC 抽象层,它消除了繁琐的 JDBC 相关编码的需要。
  • ORM 模块为流行的对象关系映射 API 提供集成层,包括 JPA、JDO、Hibernate 和 iBatis。
  • OXM 模块提供了一个抽象层,它支持 JAXB、Castor、XMLBeans、JiBX 和 XStream 的 Object/XML 映射实现。
  • Java 消息传递服务 JMS 模块包含用于生成和使用消息的功能。
  • Transaction 模块支持对实现特殊接口的类和所有 POJO 的编程和声明式事务管理。

Web

Web 层由 Web、Web-MVC、Web-Socket 和 Web-Portlet 模块组成,具体如下

  1. Web 模块提供了基本的面向 Web 的集成功能,例如多部分文件上传功能以及使用 servlet 侦听器和面向 Web 的应用程序上下文初始化 IoC 容器。
  2. Web-MVC 模块包含 Spring 的 Web 应用程序的 Model-View-Controller(模型-视图-控制器) (MVC) 实现。
  3. Web-Socket 模块支持 Web 应用程序中客户端和服务器之间基于 WebSocket 的双向通信。
  4. Web-Portlet 模块提供了在portlet 环境中使用的MVC 实现,并反映了Web-Servlet 模块的功能。

其他

如 AOP、Aspects、Instrumentation、Web 和 Test 模块,具体如下

  • AOP 模块提供了一个面向方面的编程实现,允许您定义方法拦截器和切入点,以清晰地解耦实现应该分离的功能的代码。
  • Aspects 模块提供与 AspectJ 的集成,AspectJ 又是一个强大且成熟的 AOP 框架。
  • Instrumentation 模块提供类检测支持和类加载器实现以用于某些应用程序服务器。
  • Messaging 模块支持将 STOMP 作为 WebSocket 子协议在应用程序中使用。 它还支持注解编程模型,用于路由和处理来自 WebSocket 客户端的 STOMP 消息。
  • Test 模块支持使用 JUnit 或 TestNG 框架对 Spring 组件进行测试。

核心特性

  • DI(依赖注入):Inversion of Control (IoC) 控制反转是一个通用概念,可以用多种不同的方式表达。 依赖注入只是控制反转的一个具体例子。究竟什么是依赖注入? 我们分别来看这两个词。 这里依赖部分转化为两个类之间的关联。 例如,A 类依赖于 B 类。现在,我们来看第二部分,注入。 这意味着,B 类将被 IoC 注入到 A 类中。
  • AOP(面向方面编程):跨越应用程序多个点的功能称为横切关注点,这些横切关注点在概念上与应用程序的业务逻辑分开。 有各种常见的好例子,包括日志记录、声明式事务、安全性、缓存等。

OOP 中模块化的关键单元是类,而 AOP 中模块化的单元是方面。 DI 可帮助您将应用程序对象彼此分离,而 AOP 可帮助您将横切关注点与它们影响的对象分离。