Spring 框架总览

Spring 简介

Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。

  • 它是轻量级、松散耦合的。
  • 它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。
  • 它可以集成其他框架,如 Spring MVC、Hibernate、MyBatis 等,所以又称为框架的框架( 粘合剂、脚手架 )。

Spring 模块

在这里插入图片描述

Spring 核心容器

对应图中的 Core Container,该层基本上是 Spring Framework 的核心,包含以下模块:

  • Spring Core

  • Spring Bean

    核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IoC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

  • Spring Context

    Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、事件机制、校验和调度功能。

  • SpEL (Spring Expression Language)

    Spring 表达式语言全称为 “Spring Expression Language”,缩写为 “SpEL” ,类似于 Struts2 中使用的 OGNL 表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与 Spring 功能完美整合,如能用来配置 Bean 定义。

也可以说,Core Container 就是 Spring IoC。

数据访问 / 整合

对应图中 Data Access,该层提供与数据库交互的支持,包含以下模块:

  • JDBC (Java Database Connectivity)

    Spring 对 JDBC 的封装模块,提供了对关系数据库的访问。

  • ORM (Object Relational Mapping)

    Spring ORM 模块,提供了对 hibernate5 和 JPA 的集成。

    • hibernate5 是一个 ORM 框架。
    • JPA 是一个 Java 持久化 API 。
  • OXM (Object XML Mappers)

    Spring 提供了一套类似 ORM 的映射机制,用来将 Java 对象和 XML 文件进行映射。这就是 Spring 的对象 XML 映射功能,有时候也成为 XML 的序列化和反序列化。

  • Transaction

    Spring 简单而强大的事务管理功能,包括声明式事务(@Transactional)和编程式事务(TransactionTemplate)。

Web

该层提供了创建 Web 应用程序的支持,包含以下模块:

  • Web MVC

    MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

  • Web Flux

    基于 Reactive 库的响应式的 Web 开发框架。

  • Web Socket

    Spring 4.0 的一个最大更新是增加了对 Websocket 的支持。

    Websocket 提供了一个在 Web 应用中实现高效、双向通讯,需考虑客户端(浏览器)和服务端之间高频和低延时消息交换的机制。

    一般的应用场景有:在线交易、网页聊天、游戏、协作、数据可视化等。

  • Portlet 已经废弃

AOP

该层支持面向切面编程,包含以下模块:

  • AOP

    通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。

    Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

  • Aspects

    该模块为与 AspectJ 的集成提供支持。

  • Instrumentation

    该层为类检测和类加载器实现提供支持。

其他

  • JMS (Java Messaging Service)

    提供了一个 JMS 集成框架,简化了 JMS API 的使用。

  • Test

    该模块为使用 JUnit 和 TestNG 进行测试提供支持。

  • Messaging

    该模块为 STOMP 提供支持。它还支持注解编程模型,该模型用于从 WebSocket 客户端路由和处理 STOMP 消息。

Spring 的优缺点

优点

  • DIDependency Injection(DI) 方法,使得构造器和 JavaBean、properties 文件中的依赖关系一目了然。
  • 轻量级:与 EJB 容器相比较,IoC 容器更加趋向于轻量级。这样一来 IoC 容器在有限的内存和 CPU 资源的情况下,进行应用程序的开发和发布就变得十分有利。
  • 面向切面编程(AOP): Spring 支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。
  • 集成主流框架:Spring 并没有闭门造车,Spring 集成了已有的技术栈,比如 ORM 框架、Logging 日期框架、J2EE、Quartz 和 JDK Timer ,以及其他视图技术。
  • 模块化:Spring 框架是按照模块的形式来组织的。由包和类的命名,就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
  • 便捷的测试:要 测试一项用Spring开发的应用程序 十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用 JavaBean 形式的 POJO 类,可以很方便的利用依赖注入来写入测试数据。
  • Web 框架:Spring 的 Web 框架亦是一个精心设计的 Web MVC 框架,为开发者们在 Web 框架的选择上提供了一个除了主流框架比如 Struts 、过度设计的、不流行 Web 框架的以外的有力选项。
  • 事务管理:Spring 提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单 DB 的环境下)和复杂的共同事物处理(比如利用 JTA 的复杂 DB 环境)。
  • 异常处理:Spring 提供一个方便的 API ,将特定技术的异常(由JDBC, Hibernate, 或 JDO 抛出)转化为一致的、Unchecked 异常。

缺点

  • 每个框架都有的问题,调试阶段不直观,后期的 bug 对应阶段,不容易判断问题所在。要花一定的时间去理解它。
  • 把很多 JavaEE 的东西封装了,在满足快速开发高质量程序的同时,隐藏了实现细节。

Spring 中的设计模式

Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:

  • 代理模式 — 在 AOP 和 remoting 中被用的比较多。
  • 单例模式 — 在 Spring 配置文件中定义的 Bean 默认为单例模式。
  • 模板方法 — 用来解决代码重复的问题。比如 RestTemplateJmsTemplateJdbcTemplate
  • 前端控制器 — Spring提供了 DispatcherServlet 来对请求进行分发。
  • 视图帮助(View Helper) — Spring 提供了一系列的 JSP 标签,高效宏来辅助将分散的代码整合在视图里。
  • 依赖注入 — 贯穿于 BeanFactory / ApplicationContext 接口的核心理念。
  • 工厂模式 — BeanFactory 用来创建对象的实例。
发布了85 篇原创文章 · 获赞 335 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章