详解Spring Framework及设计理念

1 缘起

学习Spring注解过程中,发现不同的注解在不同的模块中,
如@RestController在spring-web,@DependOn在spring-context,
但,同属于Spring Framework,
于是打算再一次从Spring Framework开始梳理,
因为,之前在开发时,学习前人代码中对不同注解的使用,
但是,并没有形成体系,比较零散,
我学习Spring是从应用开始的,没有走Spring的设计、框架再到应用这个路线,
本末倒置了,并没有学习到Spring的精髓,
所以,在后来的学习中,逐步补齐Spring相关的设计、框架方面的知识。
现,分享Spring Framework这个项目,帮助读者从全局了解Spring的架构。


这里有个小插曲,我在Spring官网查找Spring Framework相关文档时,
官网只有近期的几个新版本,没有历史版本,
在看Spring Framework的文档时,官网最早的版本为5.2.22,
这个版本的文档中,并没有Spring Framework的示意图,
于是开始寻找历史文档,通过:https://docs.spring.io/spring-framework/docs
可以看到Spring Framework所有版本的文档,
发现,Spring Framework5.0.0.M5是包含Spring Framework运行时示意图的最后一个版本,从Spring Framework5.x发行版开始,官网文档就没有Spring Framwork运行时示意图了。


(1)SpringFramework文档各版本文档地址:https://docs.spring.io/spring-framework/docs
(2)SpringFramework 5.0.0.M5文档地址:https://docs.spring.io/spring-framework/docs/5.0.0.M1/spring-framework-reference/html/overview.html#overview-modules

2 Spring Framework

Spring Framework是Java平台。
为开发Java应用程序提供全面的基础设施支持,开发者只需专注于应用程序开发,其他的交给Spring。

2.1 设计理念

  • 可配置。Spring让开发者尽可能推迟设计决策,比如,可以通过配置切换持久层供应商而无需修改代码逻辑,许多其他基础设施问题和集成第三方API也遵循这种设计。
  • 灵活。Spring主张灵活设计,不限定如何实现功能,开发者可以因地制宜。
  • 向后兼容。Spring非常谨慎地管理其版本迭代,因此Spring版本间几乎没有断层,保持良好的向后兼容性。Spring支持的JDK版本和第三方库都是精心设计的,以保证依赖于Spring的项目可以正常运作。
  • 注重API设计。Spring团队投入大量的时间和精力设计简明的API,这些API可以横跨多个版本以及多年使用。
  • 高代码质量。Spring Framework强调有意义、当前和准确的Java文档,Spring是极少数能声称代码简洁、包之间没有循环依赖的项目之一。

2.2 Spring Framework运行时

Spring Framework由20多个模块组成,开发者可以选择需要模块集成在项目中,
这些模块按照功能可划分为:
Core Container、Data Access/Integration、Web、AOP、Instrumentation、Messaging和Test,
示意图如下图所示。
在这里插入图片描述

2.2.1 Core Container

Core Container由模块spring-core、spring-beans、spring-context、spring-context-support和spring-expression组成。
模块spring-core和spring-beans提供基础设施,包括IoC和依赖注入。BeanFactory是工厂模式的复杂实现,消除了对单例的需求,允许将依赖的配置和规范与实际逻辑解耦。

spring-context模块构建在Core和Bean模块上,即以framework-style方式访问对象,类似于JNDI。Context模块继承Bean模块特性并且添加了对的国际化、事件传播、资源加载和上下文创建(如Servlet容器)支持。Context模块支持Java EE的特性,如EJB、JMX和基础远程处理。ApplicationContext接口是Context模块的接入点。spring-context-support为集成第三方库到Spring应用上下文提供支持,比如缓存(EhCache、JCache)和调度(CommonJ、Quartz)。

spring-expression模块为查询和在运行时操作对象图提供强大的表达语言。spring-expression是统一表达语言的扩展,该表达语言支持setting和getting操作属性值,属性分配,方法调用,访问数组、集合和索引内容,逻辑和数学计算,变量命名以及在Spring IoC容器中以名称检索对象,同时,支持列表映射和选择以及通用列表聚合。

2.2.2 AOP和Instrumentation

spring-aop模块提供符合AOP的面向切面编程实现,如允许自定义方法拦截器和切入点实现解耦。使用源码级别的元数据功能,可以将行为信息合并到代码中,类似于.NET属性。

spring-aspects模块提供集成AspectJ。
spring-instrument模块提供类仪器支持,类加载器实现会在特定的应用服务器中使用。spring-instrument-tomcat模块包含Tomcat代理。

2.2.3 Messaging

Spring Framework4包含spring-messaging模块,抽象自Spring整合项目如Message、MessageChannel、MessageHandler以及其他作为消息应用的服务。该模块包含一系列注解,将消息与方法进行映射,类似于Spring MVC注解编程模型。

2.2.4 Data Access/Integration

数据接入或集成层包括JDBC、ORM、OXR、JMS和事务模块。
spring-jdbc模块提供JDBC抽象层,去掉了冗余的JDBC编程和对析数据库供应商特定的错误编码的解析。
spring-tx模块对实现指定接口和所有POJO类提供编程和声明性事务支持。
spring-orm模块为流行的对象关系映射API提供集成层,包括JPA和Hibernate,通过spring-orm模块可以将这些O/R映射框架与Spring提供的所有其他功能结合使用,比如前面提到的声明式事务管理。
spring-oxm模块提供的抽象层支持Object/XML映射实现,如JAXB、Castor、JiBX和XStream。
spring-jms模块(Java消息服务)包含生产和消费消息特性,从Spring Framework4.1开始,提供集成spring-messaging模块。

2.2.5 Web

Web层由spring-web、spring-webmvc和spring-websocket模块组成。
spring-web模块提供基础的面向web集成特性,如多文件上传功能,使用Servlet监听器和面向web应用上下文进行IoC容器初始化。同时,包含HTTP客户端和Spring远程支持的web相关组件。
spring-webmvc模块(Web-Servlet模块)包含Spring的MVC(Model-View-Controller)和网络应用的REST网络服务实现。Spring的MVC框架为领域模型、web表单和集成的Spring Framework其他特性提供解耦。

2.2.6 Test

spring-test模块通过JUnit或TestNG支持Spring组件的单元测试和集成测试,提供Spring ApplicationContext和这些上下文缓存的载入,同时支持Mock对象用于隔离测试。

3 Spring Framework包含的项目

序号组名(GroupId)项目名(ArtifactId)描述
1org.springframeworkspring-aopAOP代理
2org.springframeworkspring-aspects基于切面的AspectJ
3org.springframeworkspring-beansBean支持,包括Groovy
4org.springframeworkspring-context应用上下文运行时,包括调度和远程抽象
5org.springframeworkspring-context-support支持集成通用第三方库到Spring应用上下文
6org.springframeworkspring-core核心工具,供其他Spring模块使用
7org.springframeworkspring-expressionSpring表达语言(SpEL)
8org.springframeworkspring-instrumentJVM启动仪器代理
9org.springframeworkspring-instrument-tomcatTomcat仪器代理
10org.springframeworkspring-jdbcJDBC支持包,包括数据源配置和JDBC访问
11org.springframeworkspring-jmsJMS支持包,包括帮助类发送和接收JMS消息
12org.springframeworkspring-messaging支持消息架构和协议
13org.springframeworkspring-orm对象关系映射,包括JPA和Hibernate支持
14org.springframeworkspring-oxm对象/XML映射
15org.springframeworkspring-test支持Spring组件单元测试和集成测试
16org.springframeworkspring-tx事务基建,包括DAO和JCA
17org.springframeworkspring-webWeb支持包,包括客户端和远程web
18org.springframeworkspring-webmvcWeb应用的REST Web服务和MVC实现
19org.springframeworkspring-websocketWebSocket和SocketJS实现,支持STOMP

4 小结

(1)Spring Framework是Java平台。为开发Java应用程序提供全面的基础设施支持,开发者只需专注于应用程序开发,其他的交给Spring。
(2)Spring Framework设计理念:可配置、灵活、向后兼容、注重API设计和高质量代码。
(3)Spring Framework分为6个模块:Web、Data Access/Integration、AOP、Messaging、Core Container和Test。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值