热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

手撸Spring系列0:系统架构介绍(开篇)

作为手撸Spring系列的开篇,笔者将会在此章节对Spring的系统架构做一个简单的解析,以方便大家能够对Sprin

说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。

手撸Spring系列是笔者本人首次尝试的、较为规范的系列博客,将会围绕Spring框架分为 IOC/DI 思想
、 Spring MVC
、 AOP 思想
、 Spring JDBC
 四个模块,并且每个模块都会分为 理论篇
、 源码篇
、 实战篇
 三个篇章进行讲解(大约12篇文章左右的篇幅)。从原理出发,深入浅出,一步步接触Spring源码并手把手带领大家一起写一个 迷你版的Spring框架,促进大家进一步了解Spring的本质!

由于源码篇涉及到源码的阅读,可能有小伙伴没有成功构建好Spring源码的阅读环境,笔者强烈建议:想要真正了解Spring,一定要构建好源码的阅读环境再进行研究,具体构建过程可查看笔者此前的博客:《如何构建Spring5源码阅读环境》

前言

作为 手撸Spring系列
 的开篇,笔者将会在此章节对Spring的系统架构做一个简单的解析,以方便大家能够对Spring有一个整体的理解。


系统架构图


Spring大约有20个模块:核心容器
AOP
数据访问集成
Web
通信报文
测试
 等模块,其中前四个模块是我们接下来要重点讲述且要进行手写的功能


1.核心容器

核心容器由 spring-beans
spring-core
spring-context
spring-expression
 四个模块组成:

  • spring-beans 和 spring-core 模块是Spring框架中核心的核心,其中包IOC(控制反转)与DI(依赖注入)两大核心思想。使得BeanFactory
    利用控制反转的思想生产出应用程序需要的bean,但bean不会被马上被实例化,只有bean要被调用时才会进行实例化和依赖的装配。

  • spring-context 模块基于前两个模块进行开发。且其中的核心接口ApplicationContext
    的最顶级的基类是BeanFactory,但其与BeanFatory不同的是,BeanFactory生产出bean后,不会对bean进行实例化,而是等到bean被调用时才进行装配。而ApplicationContext实例化后会对所有单实例的bean进行装配和实例化,使其进入待用状态。

  • spring-context-support 容器的扩展支持

  • spring-context-indexer 类管理组件和Classpath扫描组件

  • spring-expression 统一表达式语言(EL)扩展模块。


2.AOP

Spring AOP 由 spring-aop
spring-aspects
spring-instrument
 三个模块组成:

  • spring-aop 是Spring实现AOP(面向切面编程)的核心模块,使得Spring能够支持前置通知、后置通知、异常通知以及返回通知等功能

  • spring-aspects 该模块继承于AspectJ框架,其使得Spring AOP能够拥有多种实现AOP的方法

  • spring-instrument 该模块也是实现AOP功能的重要模块,其作用是在JVM运行时生成代理类,并使该代理类按照程序员的意愿对正在运行的类中的信息进行修改,使其功能增强(比如将没有日志功能的类加上日志功能),最终实现AOP。


3.数据访问集成

数据访问集成主要由 spring-jdbc
spring-tx
spring-orm
spring-oxm
spring-jms
 五个模块组成:

  • spring-jdbc 模块提供jdbc抽象框架,用于简化jdbc的操作。

  • spring-tx 数据库事务支持模块

  • spring-orm 模块主要用于集成ORM框架,如:Hibrenate、MyBatis等

  • spring-oxm 模块主要提供一个抽象层。OXM(Object-XML-Mapping),当Mybatis使用xml作为配置时,其实现就是依赖该模块下的代码

  • spring-jms 发送和接收信息(一般用于消息队列的集成)


4.Web

web功能由 spring-web
spring-webmvc
spring-websocket
spring-webflux
 四个模块组成:

  • spring-web 提供最基本的web服务支持

  • spring-mvc 提供MVC(model-view-controller)支持

  • spring-websocket 实现全双工通信协议

  • spring-webflux 用于建立异步的、非阻塞式服务


5.通信报文

  • spring-messaging
     租用用于Spring集成的基础报文传送


6.集成测试

  • spring-test
     提供测试服务


7.集成兼容

  • spring-framework-bom
     主要用于解决Spring模块依赖版本不同而带来的问题





推荐阅读
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因
    本文介绍了解决java.lang.IllegalStateException: ApplicationEventMulticaster not initialized错误的方法和原因。其中包括修改包名、解决service name重复、处理jar包冲突和添加maven依赖等解决方案。同时推荐了一个人工智能学习网站,该网站内容通俗易懂,风趣幽默,值得一看。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • JVM:33 如何查看JVM的Full GC日志
    1.示例代码packagecom.webcode;publicclassDemo4{publicstaticvoidmain(String[]args){byte[]arr ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
author-avatar
手机用户2502870065
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有