一、来自官网的Spring

Spring官网地址:Spring官网
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。Spring的轻量级是相对EJB而言,轻量、控制反转、面向切面、容器等这些都是Spring的标签。目前使用最多的版本是以Apache License 2.0开源许可协议的形式发布的。Spring Framework为Java开发人员提供了便利,会大大增加底层代码层次性以及可读性,使得大量的属性文件和类得以整理。

二、Spring的优缺点

优点如下:

1、非侵入式设计

  • Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

2、 方便解耦、简化开发

  • Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

3、支持AOP

  • Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

4、支持声明式事务处理

  • 只需要通过配置就可以完成对事物的管理,而无须手动编程。

5、方便程序的测试

  • Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

6、方便集成各种优秀框架

  • Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

7、降低Jave EE API的使用难度

  • Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

缺点如下:

  • 使用了大量的反射机制,反射机制非常占用内存。

三、一张图理解Spring Framework 4.x

Spring框架到4.x阶段已集成20多个模块,这些模块分布在以下模块中:

  • 核心容器(Core Container)
  • 数据访问/集成(Data Access/Integration)层
  • Web层
  • AOP(Aspect Oriented Programming)模块
  • 植入(Instrumentation)模块
  • 消息传输(Messaging)
  • 测试(Test)模块

Spring体系结构如下图所示:

四、详解“七层”宝塔

1. 核心容器(Core Container)

Spring的核心容器是其他模块建立的基础,有Spring-core、Spring-beans、Spring-context、Spring-context-support和Spring-expression(String表达式语言)等模块组成。

  • Spring-core模块:提供了框架的基本组成部分,包括控制反转(Inversion of
    Control,IOC)和依赖注入(Dependency Injection,DI)功能。

  • Spring-beans模块:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。有趣的是,Spring容器就像一个罐子,管理着这些Bean(豆子)。

  • Spring-context模块:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。建立在Core和Beans模块的基础之上,提供一个框架式的对象访问方式,是访问定义和配置的任何对象的媒介。ApplicationContext接口是Context模块的焦点。

  • Spring-context-support模块:支持整合第三方库到Spring应用程序上下文,特别是用于高速缓存(EhCache、JCache)和任务调度(CommonJ、Quartz)的支持。

  • Spring-expression模块:提供了强大的表达式语言去支持运行时查询和操作对象图。这是对JSP2.1规范中规定的统一表达式语言(Unified EL)的扩展。该语言支持设置和获取属性值、属性分配、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算、变量命名以及从Spring的IOC容器中以名称检索对象。它还支持列表投影、选择以及常用的列表聚合。

2. 数据访问/集成(Data Access/Integration)层

数据访问/集成层由JDBC、ORM、OXM、JMS和Transactions(事务)模块组成。

  • Spring-jdbc模块:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

  • Spring-orm模块:Spring 框架插入了若干个 ORM 框架,为流行的对象关系映射(Object-Relational Mapping)API提供集成层,其中包括 JPA、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

  • Spring-oxm模块:提供了一个支持对象/XML映射的抽象层实现,例如JAXB、Castor、JiBX和XStream。

  • Spring-jms模块(Java Messaging Service):指Java消息传递服务,包含用于生产和使用消息的功能。自Spring4.1以后,提供了与Spring-messaging模块的集成。

  • Spring-tx模块:事务模块支持用于实现特殊接口和所有POJO(普通Java对象)类的编程和声明式事务管理。

3. Web层

Web层由Spring-web、Spring-webmvc、Spring-websocket和Portlet模块组成。

  • Spring-web模块:提供了基本的Web开发集成功能,例如多文件上传功能、使用Servlet监听器初始化一个IOC容器以及Web应用上下文。

  • Spring-webmvc模块:也称为Web-Servlet模块,包含用于web应用程序的Spring MVC和REST Web Services实现。Spring MVC框架提供了领域模型代码和Web表单之间的清晰分离,并与Spring Framework的所有其他功能集成。

  • Spring-websocket模块:Spring4.0以后新增的模块,它提供了WebSocket和SocketJS的实现。

  • Portlet模块:类似于Servlet模块的功能,提供了Portlet环境下的MVC实现。

4. AOP(Aspect Oriented Programming)模块
  • Spring-aop模块:提供了一个符合AOP要求的面向切面的编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以便干净地解耦。

  • Spring-aspects模块:提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的AOP框架。

5. 植入(Instrumentation)模块
  • Spring-instrument模块:提供了类植入(Instrumentation)支持和类加载器的实现,可以在特定的应用服务器中使用。
6. 消息传输(Messaging)

Spring4.0以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

7. 测试(Test)模块

Spring-test模块:支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。

Spring IOC源码剖析—整体认知Spring体系结构相关推荐

  1. Spring IoC源码:getBean 详解

    文章目录 Spring源码系列: 前言 正文 方法1:getObjectForBeanInstance 方法2:getObjectFromFactoryBean 方法3:doGetObjectFrom ...

  2. Spring IoC 源码导读

    源码记录:spring-framework-5.1.7-source-code-read 文章导读 Spring IoC 源码系列(一)BeanDefinition 初始化与注册 Spring IoC ...

  3. 【源码】Spring IOC源码

    从Spring为什么要用IoC的支点,我撬动了整个Spring的源码脉络! - 掘金 https://juejin.cn/post/7124482061364609038 seaswalker/spr ...

  4. 深入理解 Spring 之源码剖析IOC

    推荐两篇文章: https://www.jianshu.com/p/e4ca039a2272 https://www.cnblogs.com/ITtangtang/p/3978349.html 一.介 ...

  5. spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程

    本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...

  6. Spring Ioc 源码分析(一)--Spring Ioc容器的加载

    1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:Intellj idea debug 模式 ...

  7. java获取当前周一_Java互联网架构-Spring IOC源码分析

    欢迎关注头条号:java小马哥 周一至周日下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 源码介绍之前,看几个问题: Bean的承载对象是什么? Bean的定义如何存储的? B ...

  8. Spring IoC 源码系列(五)getBean 流程分析

    一.FactoryBean 用法讲解 在分析源码流程之前,我们先来看一下 FactoryBean,乍一看这家伙和 BeanFactory 很像,它们都可以用来获取 bean 对象,简单来说 Facto ...

  9. Spring IoC 源码系列(四)bean创建流程与循环依赖问题分析

    创建单例 bean 的代码细节在 org.springframework.beans.factory.support.AbstractBeanFactory#getBean 中,getBean 顾名思 ...

最新文章

  1. unix命令的一般格式是_Linux tree 命令详细使用说明
  2. 自学python数据分析要多久-如果只有1小时学Python,看这篇就够了
  3. python自学时间-学习Python、Python时间操作有哪些?
  4. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
  5. 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...
  6. sir跟seir模型有啥区别_H3C B5mini拆机,看一下跟B5有啥区别
  7. python 设置x轴_python matplotlib坐标轴设置的方法
  8. Python中文编码判别及转换
  9. java 反射机制_基础篇:深入解析JAVA反射机制
  10. POI操作EXCEL2007,报javax.xml.stream.XMLEventFactory.newFactory()错误!
  11. 使用ASP.NET状态服务维护会话信息
  12. 今天我们谈一下HTML标签中的map标签的用法和使用场景
  13. 36. In Depth Magento System Configuration
  14. Atitit 软件项目非法模块与功能的管理与  监狱管理的对比 原理与概论attilax总结
  15. java基础之枚举类
  16. 如何免费的使用思维导图和流程图制作(Draw.io VS 代码集成)
  17. QQ空间内容同步php网站,同步 Sablog 博客日志到 Qzone
  18. 购物车的制作 与注册表单验证
  19. UE的Blend Profile
  20. 图片转pdf、长图转pdf

热门文章

  1. ActiveX控件如何去除在Web使用时的安全警告
  2. 如何远程访问共享盘?远程访问共享盘是否安全?
  3. 你必须牢记的*.Config-配置文件
  4. Echarts之双横向柱状对比图
  5. 平行因子-三维荧光-PARAFAC-drEEM 0.6
  6. 【无标题】光纤收发器TX、RX分别表示什么?区分单纤双纤收发器的方法
  7. 【解决】Menu XXX/XXX/XXX can‘t be checked because doesn‘t exist
  8. Artitalk说说心情发布页面(个性定制)
  9. sqlmap的使用 (以封神台题目为例)
  10. 1.什么是bat文件