Spring——概述

摘要:本文简单介绍Spring的产生的原因,spring的整体架构图,核心设计理念,并作为接来下讲解spring几个核心部分的索引。

image-20181125134313558

一、Spring的由来

Java EE开发中,传统的EJB开发需要依赖按照J2EE规范实现的J2EE应用服务器,在应用设计时需要遵循一系列标准接口才能在测试环境中测试和部署。存在API具有侵入性,产品对容器依赖,不易通用等等问题。

为了解决这些问题,Spring便出现了,Spring为开发者提供了一个一站式轻量级应用开发框架。尽量使用pojo的方式开发,不依赖于任何容器,有利于项目快速开发,并可以与其他框架良好结合。

在网上大多是EJB的负面评价,其实翻看几年前的帖子,EJB3.0出现时也有很多优点,例如支持注解式开发,支持分布式部署(当时的Spring是不支持注解和分布式的),但是EJB的应用服务器因需要管理组件的负责生命周期以及行为,并且内置提供各项服务,这样的EJB还是显得臃肿。后来EJB和Spring互相借鉴,Spring变的更加完善,加上人们已经习惯Spring的轻量级的开发特点,EJB3.0也没有掀起太大风浪。

二、Spring的整体结构

image-20181125081803776

Core Container(核心容器)

core和beans是模块的核心部分,提供依赖注入(DI)特性。主要是BeanFactory,是对工厂模式的经典实现,真正的完成了从程序逻辑分离出依赖关系和配置。

Beans:主要是包含访问配置文件、创建和管理bean已及进行依赖注入(DI)相关操作的所有类。

Core:Spring的核心工具类,其他组件都需要用到这个包里的类。

Context:基于Beans和Core,是BeanFactory的扩展,添加了国际化、事件传播、资源加载和对Context的透明创建支持。

Expression:也就是经常说的的EL表达式,支持设置/获取属性值,属性分配,方法调用,访问上下文,算数运算符等等功能。

控制反转和依赖注入的关系

控制反转主要有两种方式:依赖注入和依赖查找。都是描述Spring将依赖关系管理交给容器来完成,Spring in Action中也是只提了Spring两大核心特性DI和AOP,百度百科干脆把依赖注入指向控制反转。

Date Access/Integration

JDBC:提供JDBC抽象层,包含了Spring对所有JDBC数据访问进行封装的所有类。

ORM:对象关系映射API,如JPA,Hibernate,MyBatis等,都支持Spring通用事务和异常层次结构。

OXM:提供了一个对Object/XML映射实现的抽象类,可以实现对象和XML文档互相转换。实现包括XMLBeans,Xstream等。

JMS:包含生产者和消费者的特性,对各种消息队列的支持。

Transaction:支持声明式事务和编程式事务。

Web

建立在ApplicationContext之上,为Web应用程序提供上下文。

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

WebMVC:Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要有配置好的handler映射、视图解析、本地化、时区、theme解决方案、还有上传文件的支持。

WebFlux:Spring WebFlux是随Spring 5推出的响应式Web框架(可能是web未来的发展方向,前几天在知乎看到问Spring MVC是否已经过时的问题~)。

AOP

提供一个联盟标准的面向切面编程实现,允许你定义诸如方法拦截器和切点干净利落地减少那些应该被分到一边的代码功,可以将异常处理、事务、日志等代码从业务代码中剥离出来。

Aspects:提供了对AspectJ的支持

Instrumentation

提供了对class instrumentation的支持和classloader的实现,使得可以在特定应用服务器上使用。spring-instrument-tomcat模块包含了为tomcat提供的spring仪器(instrumentation)代理。

Messaging

从spring集成项目(如Meaasge,MessageChannel,MessageHandler,和其他基于消息应用的基础服务)而来的关键抽象.这个模块也包括一系列的用来映射消息到方法的注解,类似于基于编程模型的springMVC注解.

Test

支持使用Junit对Spring组件进行测试。

三、Spring的价值

  1. Spring是一个非侵入性框架,目标是使应用程序代码对框架的依赖最小化。
  2. 提供了一个一致的编程模式,使应用直接使用POJO开发,从而可以与运行环境隔离开。
  3. Spring推动应用的设计风格向面向对象及面向接口编程转变,提高了代码的重用性和可测试性
  4. Spring改进了体系结构的选择,提供了平台切换的选择性,降低了风险(例如SpringMVC,Struts之间的切换,虽然一般不这样做)。

本文参考:

  1. Spring技术内幕 计文柯
  2. Spring源码深度解析 郝佳
  3. 码农翻身 刘欣
  4. Spring5 系统架构
  5. Spring与EJB比较
  6. EJB到底是什么,真的那么神秘吗
0%