Spring Framework 简谈

前言

在目前Java 软件开发中,Spring框架可谓是大行其道,但在日常业务开发中,基本都是浅尝辄止,使用着基本的几个特性,对于Spring框架的整体架构以及相关原理,往往会欠缺了解和思考,虽然在某种层面来说它只是一个代码工具,但也应该需要了解其所提供的功能和相关原理,才能更好的使用。

本篇内容基本来自Spring 的官网,主要是说明Spring Framework 项目整体的架构体系,对Spring Framework 包含的模块做相关的解析,暂不对相关原理的做解析。

概述

本文就下图做展开说明,由于目前官网没有找到最新的5.X版本概览图,就先拿4.3.27.RELEASE版本做说明,然后再对5.x版本做单独说明:

  • spring-framework-runtime

Core Container

核心容器(Core Container)是由spring-corespring-beansspring-contextspring-context-supportspring-expressionSpring表达式)模块组成。

  1. spring-corespring-beans模块是框架的基本组成部分,提供了包括 IoC 和依赖注入功能。 BeanFactory 是工厂模式的复杂实现。它解决了程序对单例的需求,并允许将依赖项的配置和规范与实际程序逻辑解耦。
  2. 上下文(spring-context)模块是建立在CoreBeans基础模块上的。这是一种以类似于JNDI注册中心的框架样式方式访问对象的方法。 Context模块从Beans模块继承其功能,并增加了对国际化、事件传播、资源加载以及通过Servlet容器创建上下文的支持。上下文模块还支持Java EE功能,例如EJBJMX和基本远程处理。同时,spring-context-support提供了将通用第三方库集成到Spring应用程序上下文中的支持,例如邮件(JavaMail)、调度(Quartz)和模板引擎(FreeMarker)。
  3. spring-expression模块提供了一种功能强大的表达式语言,用于在运行时查询和操作对象视图。它是对JSP 2.1规范中指定的统一表达语言(统一EL表达式)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器、逻辑和算术运算符、命名变量以及按名称从SpringIOC容器中检索对象的内容。

AOP

spring-aop模块提供了一个面向切面编程实现。例如,可以定义方法拦截器和切入点,利用切面技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。

所谓切面,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

同时,spring-aspects模块提供了对AspectJ的集成。

Instrumentation

spring-instrument模块提供了对检测类的支持和用于特定的应用服务器的类加载器的实现。spring-instrument-tomcat模块包含了用于tomcatSpring检测代理。

Messaging

Spring Framework 4包含一个Spring-messaging模块,该模块具有来自Spring Integration项目的关键抽象,例如MessageMessageChannelMessageHandler等,它们充当基于消息的应用程序的基础。 该模块还包括一组注解,用于将消息映射到方法,类似于基于Spring MVC注解的编程模型。

Data Access/Integration

数据访问与集成(Data Access/Integration)由JDBCORMOXMJMS事务模块组成。

  1. spring-jdbc模块提供了一个JDBC抽象层,消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
  2. spring-tx模块支持对实现特殊接口的类以及所有POJO(普通 Java 对象)进行编程和声明式事务管理。编程式事务需要自己写beginTransactioncommitrollback等事务管理方法,声明式事务是通过注解或配置由Spring自动处理。
  3. spring-orm模块提供了对流行的对象关系映射API的集成,包括JPAHibernate等。通过此模块可以让这些ORM框架和Spring的其它功能整合,比如前面提及的事务管理。
  4. spring-oxm模块提供了对OXM实现的支持,比如JAXBCastorXML Beans等。
  5. spring-jms模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了spring-messaging 模块。

Web

Web层由spring-webspring-webmvcspring-websocketspring-webmvc-portlet模块组成。

  1. spring-web模块提供了基本的面向Web的集成功能,例如文件上传功能以及使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端以及Spring远程调用中与web相关的部分。
  2. spring-webmvc模块(即Web-Servlet模块)为web应用提供了模型视图控制(MVC)和REST Web服务的实现。SpringMVC框架可以使领域模型代码和web表单完全地分离,且可以与Spring框架的其它所有功能进行集成。
  3. spring-websocket 提供了对websocket的支持,spring-websocket进一步对原生API的封装,与 Java WebSocket API 标准兼容,并且还提供额外功能。
  4. spring-webmvc-portlet模块(即Web-Portlet模块)提供了用于Portlet环境的MVC实现,并反映了spring-webmvc模块的功能。

Test

spring-test模块支持使用JUnitTestNGSpring组件进行单元测试和集成测试。 它提供了Spring ApplicationContexts的一致加载以及这些上下文的缓存。 它还提供了可用于隔离测试代码的模拟对象。

// to be continued…