原文作者:CHS007chs

原文地址:Spring核心框架体系结构

上图是Spring 5的模块结构图,而这些组件被分别整合在核心容器(Core Container)、AOP(Aspect Oriented Programming)、设备支持(Instrument)、数据访问及集成(Data Access/Integratioin)、Web、报文发送(Messaging)、Test等模块。

1.核心容器

  • spring-core:控制反转IoC(Inversion of Control)与依赖注入DI(Dependency Injection)的基本实现,控制反转是种设计思想,即将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
  • spring-beans:Bean工厂与bean的装配,BeanFactory接口使用控制反转对应用程序的配置、依赖性规范与实际的应用程序代码进行分离。但是BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。
  • spring-context:spring的context上下文,即IoC容器,它扩展了BeanFactory,为它添加了Bean生命周期管理、框架事件体系、资源加载透明化等功能,此外该模块还提供了很多企业级支持,如远程访问、任务调度等。ApplicationContext是该模块的核心接口,它扩展了BeanFactory,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。
  • spring-expression:spring表达式语言,是统计表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。最出色的要数函数调用和简单字符串的模板函数。

2.AOP和设备支持

  • spring-aop:面向切面编程,aop就是在某一个类或方法执行前后打个标记,声明在执行到这里之前要先执行什么,执行完这里之后要接着执行什么,插入新的执行方法。在Spring中,它是以JVM的动态代理技术为基础,然后设计一系列AOP横切实现,比如前置通知、返回通知、异常通知等,同时Pointcut接口来匹配切入点,可以使用现有切入点来设计横切面,也可以扩展相关方法根据需求进行切入。
  • spring-aspects:集成AspectJ, 主要是为Spring AOOP提供多种AOP实现方法。
  • spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器。该模块是基于JAVA SE中的“java.lang.instrument”进行设计的,应该算是AOP的一个支援模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的实现。

3.数据访问及集成

  • spring-jdbc:jdbc的支持,主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类JdbcTemplate、SimpleJdbcTemplate、NamedParameterJdbcTemplate
  • spring-tx:事务控制,通过它的AOP配置,可以灵活的配置在任何一层,但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。
  • spring-orm:对象关系映射,集成orm框架,主要集成Hibernate、Java Persistence API(JPA)和Java Data Object(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略。
  • spring-oxm:对象xml映射,OXM是Object to XML Mapping的缩写,例如:jaxb, castor xmlbeans,JiBx,XStream等。
  • spring-jms:java消息服务
  • spring-messaging:为Spring框架集成一些基础的报文发送应用。

4.Web

  • spring-web:提供最基础的web支持,主要建立在核心容器上,通过Servlet或者Listener来初始化IOC容器,也包括一些与Web相关的支持。
  • spring-webmvc:实现了Spring MVC的Web应用
  • spring-websocket:主要是与Web前端的全双工通讯协议。
  • spring-webflux:是一个新的非阻塞式Reactive Web框架,可以用来建立异步、非阻塞、事件驱动的服务,并且扩展性非常好。

该图是Spring 5的包结构,可以从中清楚看出Spring各个模块之间的依赖关系,所以在学习Spring的源码时,可以从Spring-core入手,其次是Spring-beans和spring-aop,随后是spring-context,再其次是spring-tx和spring-orm。因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging。

最后欢迎大家访问我的个人网站:1024s

Spring框架—体系结构相关推荐

  1. Spring 框架教程

    Spring 框架教程 Spring Framework是最流行的Java EE框架之一.本文面向希望学习Spring框架体系结构的Java开发人员,它的核心组件以及属于Spring框架伞的各种项目. ...

  2. 超详细的Spring框架讲解,就这一篇!足矣

    spring框架的学习笔记,以及演示代码. Spring框架概述 1.什么是Spring 2.Spring框架的优点 3.Spring框架体系结构 Spring框架--控制反转(IOC) 1.IOC介 ...

  3. spring核心框架体系结构(jar包依赖)

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  4. java框架之Spring 核心框架体系结构

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  5. java体系技术框架_java框架之Spring 核心框架体系结构

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  6. java 框架架构图_java框架之Spring 核心框架体系结构

    很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下 ...

  7. Spring框架介绍及使用(转载)

    原文链接 Spring框架-控制反转(IOC) 1 Spring框架概述 1.1 什么是Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由R ...

  8. 深入浅出,Spring 框架和 Spring Boot 的故事

    Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一.它目前由大量提供一系列服务的模块组成.包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存 ...

  9. Spring框架Runtime介绍(导包)

    一.Spring框架Runtime介绍,如图 1.1 Test: Spring提供测试功能 1.2 Core Container:Spring核心容器,Spring启动的基本条件, 1.2.1 Bea ...

最新文章

  1. golang copy函数
  2. php pdo bind,PHPPDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别_php技巧
  3. OpenCV cv::reduce用法的实例(附完整代码)
  4. go语言IP转换uint32,uint32转换IP
  5. 朱啸虎:几百亿资金今年注入小程序,你能抓住机会吗?
  6. 输入框中提示信息(html5)
  7. 2013中国电商盘点回顾
  8. WDM驱动开发 电源管理
  9. 使用FFMPEG5.0和SDL2.0编写视频简单播放器
  10. 怎么查看电脑连接的wifi密码?2种方法分享给大家!
  11. SBB:替代固氮酶对非共生固氮可能的贡献
  12. 执法智能眼镜 android,警用AR智能眼镜解决方案
  13. 采集页面之后css布局混乱之rem适配布局
  14. 第6章 冷眼看“学而无用”——《逆袭大学》连载
  15. 7个银行的软件测试项目实战,别再说简历项目不知道怎么写了
  16. 关于射线检测与碰撞检测
  17. WebService(腾讯QQ在线状态 WEB 服务)
  18. Ubuntu20.04 OpenSlide 读图Bug 解决
  19. 求职英语_面试英文须知
  20. 云队友丨拼多多的两个世界

热门文章

  1. Response.ContentType 详细列表
  2. step3 . day5 数据结构之线性表 栈和队的应用-球钟问题
  3. CentOS配置Lamp
  4. python 端口扫描
  5. php 连接oracle插入多张图片的方法
  6. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】
  7. 安装Hue后的一些功能的问题解决干货总结(博主推荐)
  8. 廖雪峰js教程笔记9 json
  9. ie11 不能调试 因为 ie的bug
  10. Hardcoded string 下一步, should use @string resource警告 (转载)