Spring IOC源码剖析—整体认知Spring体系结构
一、来自官网的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体系结构相关推荐
- Spring IoC源码:getBean 详解
文章目录 Spring源码系列: 前言 正文 方法1:getObjectForBeanInstance 方法2:getObjectFromFactoryBean 方法3:doGetObjectFrom ...
- Spring IoC 源码导读
源码记录:spring-framework-5.1.7-source-code-read 文章导读 Spring IoC 源码系列(一)BeanDefinition 初始化与注册 Spring IoC ...
- 【源码】Spring IOC源码
从Spring为什么要用IoC的支点,我撬动了整个Spring的源码脉络! - 掘金 https://juejin.cn/post/7124482061364609038 seaswalker/spr ...
- 深入理解 Spring 之源码剖析IOC
推荐两篇文章: https://www.jianshu.com/p/e4ca039a2272 https://www.cnblogs.com/ITtangtang/p/3978349.html 一.介 ...
- spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程
本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...
- Spring Ioc 源码分析(一)--Spring Ioc容器的加载
1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:Intellj idea debug 模式 ...
- java获取当前周一_Java互联网架构-Spring IOC源码分析
欢迎关注头条号:java小马哥 周一至周日下午三点半!精品技术文章准时送上!!! 精品学习资料获取通道,参见文末 源码介绍之前,看几个问题: Bean的承载对象是什么? Bean的定义如何存储的? B ...
- Spring IoC 源码系列(五)getBean 流程分析
一.FactoryBean 用法讲解 在分析源码流程之前,我们先来看一下 FactoryBean,乍一看这家伙和 BeanFactory 很像,它们都可以用来获取 bean 对象,简单来说 Facto ...
- Spring IoC 源码系列(四)bean创建流程与循环依赖问题分析
创建单例 bean 的代码细节在 org.springframework.beans.factory.support.AbstractBeanFactory#getBean 中,getBean 顾名思 ...
最新文章
- unix命令的一般格式是_Linux tree 命令详细使用说明
- 自学python数据分析要多久-如果只有1小时学Python,看这篇就够了
- python自学时间-学习Python、Python时间操作有哪些?
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
- 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...
- sir跟seir模型有啥区别_H3C B5mini拆机,看一下跟B5有啥区别
- python 设置x轴_python matplotlib坐标轴设置的方法
- Python中文编码判别及转换
- java 反射机制_基础篇:深入解析JAVA反射机制
- POI操作EXCEL2007,报javax.xml.stream.XMLEventFactory.newFactory()错误!
- 使用ASP.NET状态服务维护会话信息
- 今天我们谈一下HTML标签中的map标签的用法和使用场景
- 36. In Depth Magento System Configuration
- Atitit 软件项目非法模块与功能的管理与 监狱管理的对比 原理与概论attilax总结
- java基础之枚举类
- 如何免费的使用思维导图和流程图制作(Draw.io VS 代码集成)
- QQ空间内容同步php网站,同步 Sablog 博客日志到 Qzone
- 购物车的制作 与注册表单验证
- UE的Blend Profile
- 图片转pdf、长图转pdf
热门文章
- ActiveX控件如何去除在Web使用时的安全警告
- 如何远程访问共享盘?远程访问共享盘是否安全?
- 你必须牢记的*.Config-配置文件
- Echarts之双横向柱状对比图
- 平行因子-三维荧光-PARAFAC-drEEM 0.6
- 【无标题】光纤收发器TX、RX分别表示什么?区分单纤双纤收发器的方法
- 【解决】Menu XXX/XXX/XXX can‘t be checked because doesn‘t exist
- Artitalk说说心情发布页面(个性定制)
- sqlmap的使用 (以封神台题目为例)
- 1.什么是bat文件