Spring Framework是什么(非常详细)
如今的 Java EE 开发中,掌握 Spring 已经成为一个开发者的必备技能,业界很有名的“Spring全家桶”也是目前主流的技术体系之一。
了解一门技术,首先要知道它是什么、都有什么、能做什么,而了解这些内容的最直接方式之一是借助官方网站和文档。从 Spring 的官方网站中找到 Spring Framework 的项目主页,可以发现如下描述:
Spring Framework 为任何类型的部署平台上的基于 Java 的现代企业应用程序提供了全面的编程和配置模型。
Spring 的一个关键要素是在应用程序级别提供基础架构支持:Spring 专注于企业应用程序的“脚手架”,以便团队可以专注于应用程序级别的业务逻辑,而不必与特定的部署环境建立不必要的关联。
- 任何类型的部署平台:无论是操作系统,还是 Web 容器(如 Tomcat 等),都可以部署基于 Spring Framework 的应用。
- 企业应用程序:包含 Java SE 和 Java EE 在内的一站式解决方案。
- 编程和配置模型:基于框架进行编程,以及通过框架完成功能和组件的配置。
- 基础架构支持:Spring Framework 不包含任何业务功能,它只是一个底层的应用抽象支撑。
- 脚手架:使用它可以更快速地构建应用。
另外,从网络上流传比较多的、认可度相对较高的概述中,我们也能发现一些新的关键词:
Spring Framework 是一个分层的、Java SE/Java EE 的一站式轻量级开源框架,以 IOC 和 AOP 为内核,提供表现层、持久层、业务层等领域的解决方案,同时还提供了整合第三方开源技术的能力。
Spring Framework 是一个 Java EE 编程领域的轻量级开源框架,它是为了解决企业级编程开发中的复杂性、实现敏捷开发的应用型框架。Spring Framework 是一个容器框架,它集成了各个类型的工具,通过核心的IOC容器实现了底层的组件实例化和生命周期管理。
Spring Framework 是一个开源的容器框架,核心是 IOC 和 AOP,它为简化企业级开发而生。Spring Framework 有诸多优良特性(非侵入、容器管理、组件化、轻量级、一站式等)。
- 轻量级:相较于重量级框架,它的规模更小(可能只有几个jar包)、消耗的资源更少。
- IOC和AOP:这是 Spring Framework 的两大核心特性,即控制反转(Inverse of Control,IOC)和面向切面编程(Aspect Oriented Programming,AOP)。
- 整合第三方开源技术:Spring Framework 可以很方便地整合第三方技术(如持久层框架 MyBatis/Hibernate、表现层框架 Struts2、权限校验框架 Shiro 等)。
- 容器:Spring Framework 的底层有一个管理对象和组件的容器,由它来支撑基于 Spring Framework 构建的应用的运行。
- 一站式:覆盖企业级开发中的所有领域。
综合以上的官方权威概述和开发者的经验总结,笔者也试着提取和总结一个尽可能表述完整且精简的概述:
Spring Framework 是一个开源的、松耦合的、分层的、可配置的一站式企业级 Java 开发框架,它的核心是 IOC 与 AOP,它可以更容易地构建企业级 Java 应用,并且可以根据应用开发的组件需要,整合对应的技术。
简单解释一下如此概括的要点:- 加入“松耦合”的概念是为了强化 IOC 和 AOP 的描述(两者都是降低耦合的手段)。
- 加入“可配置”是为了给 Spring Boot 垫底(Spring Boot 非常重要的特性之一)。
- IOC 和 AOP 可提可不提,只要是对 Spring 有最基础了解的读者都应该知道。
- 没有提“轻量级”,是考虑到现在大环境的趋势已没有 EJB 的身影。
- 没有提“容器”的概念,是因为 Spring Framework 不仅仅是一个容器,如果只限定在容器层面,那相当于收窄含义。
- 注意对比“企业级Java开发”与“Java EE开发”的区别:Spring Framework 不仅能构建 Web 项目,也可以构建和开发普通的 Java SE 项目、GUI 项目。
总的来看,Spring Framework 是一个功能极其强大的基础型框架,其设计考虑之周全,决定了几乎任何 Java 应用都可以从 Spring Framework 中受益。
Spring Framework的组成结构
Spring Framework 是一个分层的架构,它包含一系列核心要素,并大体分为若干模块。以下简单描述这些核心模块的含义及作用。1) IOC及IOC容器
Spring Framework 的底层核心是一个容器,由于其充分体现了 IOC 的特性,因此又被称为 IOC 容器。IOC 部分包含 Spring Framework 最基础的核心代码 core、与组件对象相关的 beans、与容器上下文相关的 context,以及支持 SpEL 表达式相关的 expression 模块。
整个 IOC 模块是 Spring Framework 的基础,后续的所有模块都建立在此之上。
2) AOP
AOP 是基于面向对象编程(OOP)的补充,它可以支持开发者定义一些方法的切入点和增强器,用于将一些通用逻辑代码与业务功能代码相分离,降低其耦合度。由于 AOP 建立在 IOC 模块的基础上,因此能够充分利用 IOC 容器和 Bean 组件的特性,使得容器中所管理的 bean 对象都可以支持 AOP。
3) 数据访问
对绝大部分的应用程序而言,主要关注的问题就是与数据库、数据存储的访问和操作。Spring Framework 没有局限于针对某一种数据存储类型的场景做文章,而是以一个更高的层次,通过抽取 jdbc、orm、tx 等模块,制作了一套访问关系型数据库的通用抽取模板,通过引入模板的设计和思想将数据访问变得非常简单。
此外,借助 AOP 的思想,Spring Framework 还提供了声明式事务等功能。
4) Web
Spring Framework 在整合 Web 环境中也有对应的 WebMvc 和 WebFlux 技术实现,通过引入不同的模块,可以实现基于传统 Servlet API 的 WebMvc 开发,或者完全不依赖 Servlet API 的 WebFlux 实现响应式 Web 开发;另外通过引入不同的页面和模板引擎,可以使得 Spring Framework 支持多种视图层技术。此外,基于 HTML5 规范的 WebSocket 也在 Spring Framework 4.0 中予以支持。