总体架构

Spring 框架基本涵盖了企业级应用开发的各个方面,它由二十多个模块组成。

Core Container

Core Container 由spring-core 、spring-beans 、spring-context 、spring-context-support和spring-expression ( Spring Expression Language )模块组成。

spring-corespring-beans 模块提供框架的基础部分,包括IoC 和Dependency Injection 功能。BeanFactory 是一个复杂工厂模式的实现,无须编程就能实现单例,并允许开发人员将配置和特定的依赖从实际程序逻辑中解耦。

Context ( spring-context )模块建立在Core 和Beans 模块提供的功能基础之上,它是一种在框架类型下实现对象存储操作的手段,有一点像JNDI 注册。Context 继承了Beans 模块的特性,并且增加了对国际化的支持(如用在资源包中)、事件广播、资源加载和创建上下文(如一个Servlet容器) 。Context 模块也支持如EJB 、JMX 和基础远程访问的Java EE 特性。ApplicationContext 接口是Context 模块的主要表现形式。spring-context-support 模块提供了对常见第三方库的支持,以便集成到Spring应用上下文,如缓存(EhCache 、JCache ) 、调度( CommonJ、Quartz )等。

spring-expression 模块提供了一种强大的表达式语言,用来在运行时查询和操作对象图。它是作为JSP 2.1 规范所指定的统一表达式语言的一种扩展。这种语言支持对属性值、属性参数、方法调用、数组内容存储、收集器和索引、逻辑和算数的操作及命名变量, 并且通过名称从Spring的控制反转容器中取回对象。表达式语言模块还支持列表投影、选择和通用列表聚合。

AOP&Instrumentation

spring-aop模块提供AOP(面向切面编程)的实现,从而能够实现方法拦截器和切人点完全分离代码。使用源码级别元数据的功能,也可以在代码中加入行为信息,在某种程度上类似于.NET属性

单独的spring-aspects 模块提供了集成使用AspectJ。

spring-instrument 模块提供了类instrumentation的支持和在某些应用程序服务器使用类加载器实现。

spring-instrument-tomcat 用于TomcatInstrumentation代理。

Message

自SpringFramework4 版本开始提供spring-messaging 模块,主要包含从Spring Integration 项目中抽象出来的,如Message 、MessageChannel 、MessageHandler 及其他用来提供基于消息的基础服务。

该模块还包括一组消息映射方法的注解,类似基于编程模型中的Spring MVC 的注解。

Data Access

Data Access/Integration由JDBC 、ORM 、OXM 、JMS 和Transaction 模块组成。

①spring-jdbc模块提供了一个JDBC 抽象层,这样开发人员就能避免进行一些烦琐的JDBC编码和解析数据库供应商特定的错误代码。

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

③spring-orm模块为流行的对象关系映射API提供集成层,包括JPA和Hibernate。使用spring-orm模块,可以将这些O/R映射框架与Spring提供的所有其他功能结合使用, 如前面提到的简单的声明式事务管理功能。

④spring-oxm模块提供了一个支持Ojbect/XML 映射实现的抽象层,如JAXB 、Castor 、JiBX和XStream。

⑤spring-jms模块包含用于生成和使用消息的功能。从Spring Framework 4.1 开始,它提供了与spring-messaging 的集成。

Web

Web层由spring-web 、spring-webmvc 、spring-websocket 和spring-webftux 组成。

①spring-web 模块提供了基本的面向Web开发的集成功能,如文件上传及用于初始化IoC容器的Servlet 监昕和Web 开发应用程序上下文。它也包含HTTP客户端及Web相关的Spring 远程访问的支持。

②spring-webmvc 模块(也称Web Servlet 模块)包含Spring 的MVC 功能和REST 服务功能。

③spring-websocket 模块是基于WebSocket 协议通信的程序开发。

④spring-webftux 模块是Spring 5 新添加的支持响应式编程的Web开发框架。

Test

spring-test模块支持通过组合JUnit 或TestNG 来实现单元测试和集成测试等功能。它不仅提供了Spring ApplicationContexts 的持续加载,井能缓存这些上下文,而且提供了可用于孤立测试代码的模拟对象( mock objects )。

Spring设计模式

在Spring 框架设计中,广泛使用了设计模式。Spring 使用以下设计模式使企业级应用开发变得简单和可测试。

① Spring 使用POJO 模式的强大功能来实现企业应用程序的轻量级和最小侵入性的开发。

② Spring 使用依赖注入模式(DI 模式)实现松耦合,并使系统可以更加面向接口编程。

③ Spring 使用Decorator 和Proxy 设计模式进行声明式编程。

④ Spring 使用Template 设计模式消除样板代码。

Spring--总体架构相关推荐

  1. Dubbo的总体架构

    Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为服务消费方使 ...

  2. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  3. 沉淀再出发:Spring的架构理解

    沉淀再出发:Spring的架构理解 一.前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生.关于Spring,学过java的人基本上都会慢慢接触到,并且在 ...

  4. TVM 各个模块总体架构

    TVM 各个模块总体架构 Deploy Deep Learning Everywhere Existing Deep Learning Frameworks Limitations of Existi ...

  5. session传递参数_分布式 Session 之 Spring Session 架构与设计

    作者 | 李增光 杏仁后端工程师.「只有变秃,才能变强!」 ​前言 开始进行 Web 开发时,我们可能会遇到这样的情况,当服务器重启之后,之前的登录状态会失效需要重新登录.又或者你的应用程序部署了不止 ...

  6. GT Transceiver的总体架构梳理

    前言 对于7系列的FPGA,共有3个系列,每个系列都有各自的高速收发器,称为吉比特收发器,即Gigabit Transceiver,简称为GT. 每个系列的GT叫法略有不同,分别为: A7 的GTP ...

  7. 5G NR - 总体架构与物理层

    一 NR总体架构与功能划分 1.1 总体架构 NG-RAN节点包含两种类型: l  gNB:提供NR用户平面和控制平面协议和功能 l  ng-eNB:提供E-UTRA用户平面和控制平面协议和功能 gN ...

  8. 中小型研发团队架构实践:电商如何做企业总体架构?

    http://www.infoq.com/cn/articles/architecture-practice-09-enterprise-architecture?utm_source=infoq&a ...

  9. spring cloud架构 - HongHu common-service 项目构建过程

    2019独角兽企业重金招聘Python工程师标准>>> 我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来参考学习. 首先在构建spr ...

  10. 天龙源码框架分析_MySQL8-InnoDB总体架构和运行机制的系统分析(上)

    1. 前文回顾:四个阶段和两种方法 首先让我们回顾下,在上一篇文章介绍的MySQL8代码分析的四个阶段和两种方法. 四个阶段: 借鉴瀑布式软件开发流程,我们将从熟悉MySQL的使用和运维,到吃透MyS ...

最新文章

  1. 让你秒懂的折半查找(二分查找)
  2. java 非递归求二叉树高度_非递归算法实现二叉树高度
  3. 一寸照纯红色底图片_和记场下载
  4. UVA-11988 悲剧文本-静态链表
  5. android fragment 嵌套,Fragment嵌套Fragment时遇到的那些坑
  6. Linux基础命令---mke2fs
  7. 博途v14电脑要求_博途v15对电脑配置要求
  8. select标签如何设置默认选中的选项
  9. es6中 使用class里面的set和get 用法
  10. (P61)io流类库:字符串流
  11. 吐血整理C++书单,萌新到大牛,要看哪些书?
  12. 企业最大的危机是来自于内部
  13. Linux系统SCSI磁盘扫描机制解析及命令实例
  14. Linux下的Curses库的下载与安装
  15. java date before,Java中的LocalDate isBefore()方法
  16. Calibre物理验证技术点滴 (中)
  17. L1-012. 计算指数
  18. dio拦截器 flutter_Flutter开发 Dio拦截器实现token验证过期的功能
  19. 蓝桥杯历届试题-蚂蚁感冒
  20. UVM实战(张强)-- UVM中的寄存器模型

热门文章

  1. CommandLineRunner与ApplicationRunner接口的使用及源码解析
  2. 为什么AsyncTask的doInBackground会不执行?
  3. [转]一位研究生的职业生涯规划和心得体会
  4. js进阶 13-8 jquery如何实现侧边栏
  5. centos开机优化脚本
  6. 《Angular从零到一》导读
  7. shiro +spring + spring mvc+ mybatis整合【转】
  8. Linux高可用性方案之Heartbeat的CRM节点得分计算(原创)
  9. django 1.8 官方文档翻译:8-5 加密签名
  10. 在项目中寻找代码的坏味道(命名)