Spring-Framework-简谈
Spring Framework 简谈
前言
在目前Java 软件开发中,Spring框架可谓是大行其道,但在日常业务开发中,基本都是浅尝辄止,使用着基本的几个特性,对于Spring框架的整体架构以及相关原理,往往会欠缺了解和思考,虽然在某种层面来说它只是一个代码工具,但也应该需要了解其所提供的功能和相关原理,才能更好的使用。
本篇内容基本来自Spring 的官网,主要是说明Spring Framework
项目整体的架构体系,对Spring Framework
包含的模块做相关的解析,暂不对相关原理的做解析。
概述
本文就下图做展开说明,由于目前官网没有找到最新的5.X
版本概览图,就先拿4.3.27.RELEASE
版本做说明,然后再对5.x
版本做单独说明:
Core Container
核心容器(Core Container
)是由spring-core
、spring-beans
、spring-context
、spring-context-support
和spring-expression
(Spring
表达式)模块组成。
spring-core
和spring-beans
模块是框架的基本组成部分,提供了包括 IoC 和依赖注入功能。BeanFactory
是工厂模式的复杂实现。它解决了程序对单例的需求,并允许将依赖项的配置和规范与实际程序逻辑解耦。- 上下文(
spring-context
)模块是建立在Core
和Beans
基础模块上的。这是一种以类似于JNDI
注册中心的框架样式方式访问对象的方法。Context
模块从Beans
模块继承其功能,并增加了对国际化、事件传播、资源加载以及通过Servlet
容器创建上下文的支持。上下文模块还支持Java EE
功能,例如EJB
、JMX
和基本远程处理。同时,spring-context-support
提供了将通用第三方库集成到Spring
应用程序上下文中的支持,例如邮件(JavaMail
)、调度(Quartz
)和模板引擎(FreeMarker
)。 spring-expression
模块提供了一种功能强大的表达式语言,用于在运行时查询和操作对象视图。它是对JSP 2.1
规范中指定的统一表达语言(统一EL
表达式)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器、逻辑和算术运算符、命名变量以及按名称从Spring
的IOC
容器中检索对象的内容。
AOP
spring-aop
模块提供了一个面向切面编程实现。例如,可以定义方法拦截器和切入点,利用切面
技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块。
所谓切面
,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
同时,spring-aspects
模块提供了对AspectJ
的集成。
Instrumentation
spring-instrument
模块提供了对检测类的支持和用于特定的应用服务器的类加载器的实现。spring-instrument-tomcat
模块包含了用于tomcat
的Spring
检测代理。
Messaging
Spring Framework 4
包含一个Spring-messaging
模块,该模块具有来自Spring Integration
项目的关键抽象,例如Message
、MessageChannel
、MessageHandler
等,它们充当基于消息的应用程序的基础。 该模块还包括一组注解,用于将消息映射到方法,类似于基于Spring MVC
注解的编程模型。
Data Access/Integration
数据访问与集成(Data Access/Integration
)由JDBC
、ORM
、OXM
、JMS
和事务
模块组成。
spring-jdbc
模块提供了一个JDBC
抽象层,消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。spring-tx
模块支持对实现特殊接口的类以及所有POJO
(普通 Java 对象)进行编程和声明式事务管理。编程式事务需要自己写beginTransaction
、commit
、rollback
等事务管理方法,声明式事务是通过注解或配置由Spring
自动处理。spring-orm
模块提供了对流行的对象关系映射API
的集成,包括JPA
和Hibernate
等。通过此模块可以让这些ORM
框架和Spring
的其它功能整合,比如前面提及的事务管理。spring-oxm
模块提供了对OXM
实现的支持,比如JAXB
、Castor
、XML Beans
等。spring-jms
模块包含生产(produce
)和消费(consume
)消息的功能。从Spring 4.1
开始,集成了spring-messaging
模块。
Web
Web
层由spring-web
、spring-webmvc
、spring-websocket
和spring-webmvc-portlet
模块组成。
spring-web
模块提供了基本的面向Web
的集成功能,例如文件上传功能以及使用Servlet
监听器初始化IoC
容器等。它还包括HTTP
客户端以及Spring
远程调用中与web
相关的部分。spring-webmvc
模块(即Web-Servlet
模块)为web
应用提供了模型视图控制(MVC
)和REST Web
服务的实现。Spring
的MVC
框架可以使领域模型代码和web
表单完全地分离,且可以与Spring
框架的其它所有功能进行集成。spring-websocket
提供了对websocket
的支持,spring-websocket
进一步对原生API
的封装,与Java WebSocket API
标准兼容,并且还提供额外功能。spring-webmvc-portlet
模块(即Web-Portlet
模块)提供了用于Portlet
环境的MVC
实现,并反映了spring-webmvc
模块的功能。
Test
spring-test
模块支持使用JUnit
或TestNG
对Spring
组件进行单元测试和集成测试。 它提供了Spring ApplicationContexts
的一致加载以及这些上下文的缓存。 它还提供了可用于隔离测试代码的模拟对象。
// to be continued…