Spring知识点详解

1、Spring 概述

1.1、Spring 的概念和特点

Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的开源容器框架,它是由 Rod Johnson(音乐学博士)所创建,其核心就是为了解决企业应用开发的复杂性。

Spring 是一款目前主流的 Java EE 轻量级开源框架,是 Java 世界最为成功的框架之一,自 2004 年 4 月,Spring 1.0 版本正式发布以来,Spring 已经步入到了第 5 个大版本,也就是我们常说的 Spring 5。本教程使用版本为 Spring 5.3.22。

Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业级应用程序开发的首选。时至今日,Spring 俨然成为了 Java EE 代名词,成为了构建 Java EE 应用的事实标准。

Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。

Spring 致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。例如,通过 Spring 框架,整合 MyBatis 、SpringMVC等,也就是传说中的大杂烩。其主要具有以下特点:

  • 方便解耦,简化开发:管理所有对象的创建和依赖的关系维护。

  • AOP编程的支持:方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持:通过配置完成对事务的管理,而无需手动编程。

  • 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架:内部提供了对各种优秀框架的直接支持。

  • 降低JavaEE API的使用难度:封装JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)。

1.2、Spring 的狭义和广义

在不同的语境中,Spring 所代表的含义是不同的。下面我们就分别从“广义”和“狭义”两个角度,对 Spring 进行介绍。

广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。

经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。

这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验,子项目主要有以下几种:

  • Spring Data:Spring 提供的数据访问模块,对 JDBC 和 ORM 提供了很好的支持。通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。

  • Spring Batch:款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。

  • Spring Security:前身为 Acegi,是 Spring 中较成熟的子模块之一。它是一款可以定制化的身份验证和访问控制框架。

  • Spring Mobile:是对 Spring MVC 的扩展,用来简化移动端 Web 应用的开发。

  • Spring Boot:是 Spring 团队提供的全新框架,它为 Spring 以及第三方库一些开箱即用的配置,可以简化 Spring 应用的搭建及开发过程。

  • Spring Cloud:一款基于 Spring Boot 实现的微服务框架。它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。

狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。

Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

  • IOC:Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。

  • AOP:Aspect Oriented Programming 的简写,译为“面向切面编程”。

AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。

Spring 是一种基于 Bean 的编程技术,它深刻地改变着 Java 开发世界。Spring 使用简单、基本的 Java Bean 来完成以前只有 EJB 才能完成的工作,使得很多复杂的代码变得优雅和简洁,避免了 EJB 臃肿、低效的开发模式,极大的方便项目的后期维护、升级和扩展。

在实际开发中,服务器端应用程序通常采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。

Spring 致力于 Java EE 应用各层的解决方案,对每一层都提供了技术支持,例如表现成提供了对 Spring MVC、Struts2 等框架的整合;在业务逻辑层提供了管理事务和记录日志的功能;在持久层还可以整合 MyBatis、Hibernate 和 JdbcTemplate 等技术,对数据库进行访问。

这充分地体现了 Spring 是一个全面的解决方案,对于那些已经有较好解决方案的领域,Spring 绝不做重复的事情。

1.3、Spring 的体系结构

Spring 框架基本涵盖了企业级应用开发的各个方面,它包含了 20 多个不同的模块。下图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

Spring知识点详解

1.3.1、Core Container(Spring 的核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。

  • spring-core模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。。

  • spring-beans模块:提供了BeanFactory与Bean的装配,使Spring成为一个容器,也就是提供了框架的基本组成部分,包括控制反转(IOC)和依赖注入(DI)功能

  • spring-context模块:应用上下文,建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等,提供一个框架式的对象访问方式,是访问定义和配置任何对象的媒介,使Spring成为一个框架。ApplicationContext 接口是上下文模块的焦点。

  • spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。

  • spring-expression(SpELl)模块:Spring 表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。

1.3.2、AOP、Aspects、Instrumentation 和 Messaging(中间层)

在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:

  • spring-aop模块:提供了一个符合 AOP 要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。

  • spring-aspects模块:提供了与 AspectJ 的集成功能,AspectJ是 一个功能强大且成熟的面向切面编程(AOP) 框架。

  • spring-instrument模块:提供了类工具支持和类加载器的实现,可以在特定的应用服务器中使用。

  • spring-messaging模块:Spring 4.0 以后新增了消息模块,该模块提供了对消息传递体系结构和协议的支持。

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

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。

  • spring-jdbc模块:提供了一个 JBDC 的样例模板,,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析,而且能享受到 Spring 管理事务的好处。

  • spring-orm模块:提供一个对象关系映射(Object-Relational Mapping)API 框架,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。

  • spring-oxm模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。

  • spring-jms模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

  • spring-tx模块:事务模块,支持用于实现特殊接口和所有POJO类的编程和声明式事务管理。

1.3.4、Web 模块

Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件,具体介绍如下。

  • spring-web模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。

  • spring-webmvc模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。

  • spring-websocket模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。

  • spring-portlet模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。

发表评论

相关文章