【SpringSpringBoot】概述

Spring&SpringBoot专题

【注】:
本专题围绕框架核心概念展开,渐进式深入总结学习、面试、开发经验,集中整理便于回顾

持续补充与施工中~~~~

1.发展史

Spring发展史

2.基本架构

Spring框架的基本架构是一个分层架构,包括多个模块,每个模块都有不同的职责。以下是Spring框架的基本架构组成:(Spring 5.x)
Spring5

2.1 核心容器(Core Container):

2.1.1 Beans模块:

提供了Spring框架的核心功能,包括IoC(控制反转)和依赖注入。在这个模块中,定义了BeanFactory接口,以及其实现类DefaultListableBeanFactory,用于管理Bean的生命周期和依赖关系。

2.1.2 Core模块:

提供了Spring框架的核心功能,包括IoC容器的基本实现,如ApplicationContext接口及其实现类。ApplicationContext是一个高级的BeanFactory,提供了更多的企业级功能,例如事件传播、国际化支持等。

2.1.3 Context模块:

提供了访问定义和配置的对象的方式。ApplicationContext是Context模块的核心。除了Core模块的功能外,它还包括对AOP(面向切面编程)和事件传播的支持。

2.2 数据访问/集成(Data Access/Integration):

2.2.1 JDBC模块: 提供了对Java数据库连接的支持,简化了数据库访问操作。
2.2.2 Transaction模块:

提供了声明式事务管理的支持,允许通过注解或XML配置来管理事务。

2.2.3 ORM模块:

提供了对对象关系映射(ORM)框架的支持,例如Hibernate。通过该模块,Spring简化了与数据库的交互,并支持不同ORM框架的集成。

2.3 面向切面编程(AOP):

2.3.1 AOP模块:

提供了面向切面编程的支持。通过AOP,可以在不修改原有代码的情况下,将横切关注点(如日志、事务管理等)模块化。

2.4 Web模块:

2.4.1 Web模块:

提供了构建Web应用程序的支持。包括对Servlet、JSP、WebSocket、REST等的集成。

2.4.2 Web MVC模块:

提供了用于构建Web应用程序的MVC(Model-View-Controller)框架。

2.4.3 WebSocket模块:

提供了对WebSocket通信的支持。

2.4.4 WebFlux

提供了响应式编程框架

2.5 工具模块(Instrumentation):

Instrumentation模块: 提供了在运行时检测和探查应用程序的工具,支持在应用程序的类加载阶段进行字节码增强。

2.6 消息(Messaging):

Messaging模块:

提供了对消息传递的支持,包括JMS(Java消息服务)和STOMP(简单文本协议)。

2.7 测试模块(Testing):

Test模块:

提供了对Spring应用程序进行单元测试和集成测试的支持。

小结:

总体而言,Spring框架的核心思想是通过IoC和AOP来降低组件之间的耦合性,提高代码的可维护性和可测试性。每个模块都有明确定义的职责,使得开发者可以根据项目的需求选择性地引入和使用不同的功能模块。这种分层的设计使得Spring框架在企业应用开发中变得非常灵活和可扩展。

3.Spring MVC

MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。
Spring MVC(Model-View-Controller)是Spring框架中用于构建Web应用程序的模块。它是一种基于MVC设计模式的Web框架,用于将应用程序的逻辑、表示和用户输入分离开来。以下是Spring MVC的主要特点和组成部分:

3.1特点:
松耦合:

Spring MVC采用了MVC设计模式,通过将应用程序分为模型(Model)、视图(View)和控制器(Controller),实现了组件之间的松耦合,使得每个组件的修改不会对其他组件产生直接影响。

可扩展性:

通过使用拦截器(Interceptors)、视图解析器(View Resolvers)等机制,Spring MVC具有很高的可扩展性,开发者可以方便地添加新的功能和定制组件。

灵活的请求映射:

支持基于注解和XML配置的请求映射,使得请求的处理方法可以根据URL的不同进行映射,提高了灵活性。

数据绑定:

Spring MVC支持将请求参数绑定到方法的参数上,简化了参数的获取和验证。

表单处理:

提供了方便的表单处理机制,支持表单数据的绑定和验证。

RESTful支持:

Spring MVC对RESTful风格的Web服务提供了良好的支持,通过注解可以方便地定义RESTful风格的API。

集成其他Spring模块:

可以很容易地与其他Spring模块集成,如Spring IoC容器、Spring AOP等,实现全栈式的开发。

3.2组成:
DispatcherServlet:

是Spring MVC的前端控制器,负责接收HTTP请求并将请求分发给相应的处理器(Controller)。

HandlerMapping:

负责将请求映射到处理器(Controller),确定具体哪个Controller处理请求。

Controller:

处理用户请求的业务逻辑,接收用户输入、调用服务层处理业务,并返回模型数据给视图。

Model:

用于封装业务逻辑产生的数据,由Controller负责处理和返回给视图。

View:

负责展示模型数据,将用户界面呈现给用户。

ViewResolver:

负责根据逻辑视图名解析成具体的视图对象,使得Controller可以专注于业务逻辑而不关心具体的视图。

HandlerInterceptor:

拦截器,用于在请求处理前、请求处理后、视图渲染前等时机执行一些额外的逻辑,例如权限检查、日志记录等。

ModelAndView:

封装了视图和模型的信息,用于告知DispatcherServlet返回哪个视图,并包含要传递给视图的模型数据。

3.3Spring MVC请求处理流程:
  1. 客户端发送HTTP请求至DispatcherServlet。
  2. DispatcherServlet根据HandlerMapping找到匹配的Controller。
  3. Controller处理请求,调用服务层(Service)处理业务逻辑。
  4. Controller将模型数据封装在ModelAndView中,并返回。
  5. DispatcherServlet选择适当的ViewResolver,将逻辑视图名解析为具体的视图。
  6. 视图负责渲染模型数据,生成最终的响应。
  7. DispatcherServlet将响应返回给客户端。
    Spring MVC通过上述机制实现了一个清晰、灵活的Web开发框架,支持多种视图技术(JSP、Thymeleaf等),并提供了强大的拓展能力,使得开发者可以根据项目需求灵活选择不同的组件和技术。

4.IOC

IOC容器:

BeanFactory: Spring框架最基本的IOC容器,提供了基本的IOC功能,是Spring IOC容器的基础接口。BeanFactory容器采用延迟加载策略,即在需要使用时才加载对象
ApplicationContext:BeanFactory的子接口,提供了更丰富的功能,包括事件发布、国际化支持、AOP等。ApplicationContext容器在启动时即一次性加载所有的Bean,对于大多数应用来说,ApplicationContext是更常用的IOC容器

DI(Dependency Injection)
bean的生命周期*
bean 循环依赖问题
  1. 三级缓存:
  2. 构造函数注入:
  3. 延迟初始化@Lazy:
  4. 代理模式:
  5. Setter方法注入:

5.AOP

5.1实现原理:
1).代理模式
2).字节码增强
5.2注解失效场景

6.源码学习与解读

6.1注解
Transactional:
6.2.设计模式

参考:

[1].https://docs.spring.io/spring-framework/reference/
[2].https://javaguide.cn/system-design/framework/spring/spring-knowledge-and-questions-summary.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/354775.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STL---stackqueue

一、stack 1.stack的介绍 stack介绍文档 https://legacy.cplusplus.com/reference/stack/stack/?kwstack 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适…

AI技术大揭秘:探索人工智能的核心领域与必备技能

随着人工智能的不断进步,AI技术在各个领域都发挥着越来越关键的作用。想要成为AI领域的从业者,不仅需要对整体格局有清晰认识,更要掌握关键技术和必备技能。本文将深入解析AI的核心技术领域,以及在这个前沿领域里需要掌握的技能。…

Java_集合类

集合可以看作是一个容器,集合中的各个对象,很容易将其从集合中取出来,也很容易将其存放到集合中,还可以按照一定的顺序进行摆放。JAVA中提供了不同的集合类,这些类具有不同的存储对象的方式,同时提供了相应…

04-JVM虚拟机-课堂笔记

04-JVM虚拟机 1. JVM虚拟机概述 1.4 对象的创建流程与内存分配 1.4.1 创建流程 1.4.2 对象内存分配方式 内存分配的方法有两种:不同垃圾收集器不一样 指针碰撞(Bump the Pointer) 空闲列表(Free List) 分配方法说明收集器指针碰撞(Bump the Pointer)内存地址…

论机器生产内容MGC与新数字时代的两个世界

摘要:本文从新数字时代人类社会的两种存在形态:数字世界(元宇宙)与物理世界(时空宇宙),以及新兴数字产业:机器生产内容MGC的发展、现状与未来出发,通过对新数字时代及两个…

【MIdjourne基础】 |MIdjourney基础参数全解析,各类辅助知识

文章目录 1 参数列表1.1 基础参数列表 2 基础参数详解2.1 模型版本选择2.2 模型出图模式选择2.3 基础生图参数2.3.1 --ar2.3.2 --stylize2.3.3 --no2.3.4 --chaos2.3.5 --quality2.3.6 --stop2.3.7 --hd2.3.8 --repeat 1 参数列表 1.1 基础参数列表 模型版本选择 目标参数作…

什么是微服务?(微服务的技术栈)

微服务是一种架构风格,它将一个单一的应用拆分为多个小型的服务,每个服务运行在自己的进程中,服务间采用轻量级的通信机制(如HTTP/webservice等)。这些服务围绕业务能力构建,并且可以全自动独立部署。微服务…

PageHelper 分页逻辑 源码解析

一、PageHelper PageHelper 是一个用于在 MyBatis 中进行分页查询的开源分页插件。它能够方便地帮助开发者处理分页查询的逻辑,简化代码,并提高开发效率。PageHelper 支持多种数据库,包括 MySQL、Oracle、PostgreSQL 等。 PageHelper 的实现…

了解OpenCV的数据类型

OpenCV是一个开源的计算机视觉库,广泛应用于图像和视频处理领域。在OpenCV中,数据类型扮演着非常重要的角色,它们决定了数据的存储方式和操作方式。本文将介绍OpenCV中常见的数据类型,包括图像数据类型、矩阵数据类型和轮廓数据类…

使用Python和ffmpeg旋转WebM视频并保存为MP4文件

简介: 在本篇博客中,我们将介绍如何使用Python编写一个程序,结合wxPython和ffmpeg模块,来旋转WebM视频文件并将其保存为MP4格式。我们将使用wxPython提供的文件选择对话框来选择输入和输出文件,并使用ffmpeg库来进行视频旋转操作。…

IS-IS:09 ISIS路由过滤

在IS-IS 网络中,有时需要使用 filter-policy 工具对 IS-IS 路由进行过滤。这里所说的过滤,是指路由器在将自己IS-IS 路由表中的某些 IS-IS 路由纳入进自己的 IP 路由表的过程,一些满足了过滤条件的 IS-IS 路由将被限制纳入 IP 路由表中。 需要…

程序员该懂的一些测试(四)测试覆盖率

测试覆盖率通常被用来衡量测试的充分性和完整性,从广义的角度来讲,测试覆盖率主要分 为两大类,一类是面向项目的需求覆盖率,另一类是更偏向技术的代码覆盖率。 需求覆盖率 需求覆盖率是指测试对需求的覆盖程度,通常的…

Linux 驱动开发基础知识——总线设备驱动模型(七)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

C++ //练习 3.5 编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。

C Primer(第5版) 练习 3.5 练习 3.5 编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。 环境:Linux Ubuntu(云服务…

.NET高级面试指南专题三【线程和进程】

在C#中,线程(Thread)和进程(Process)是多任务编程中的重要概念,它们用于实现并发执行和多任务处理。 进程(Process): 定义: 进程是正在运行的程序的实例&…

ThinkPhp3.2(qidian)部署文档

宝塔环境部署 申请域名以及域名解析 具体配置,可百度之 在宝塔面板中创建网站 上传代码导入数据配置运行目录 注意:(如果版本:thinkphp3.2 )配置 运行目录要特别注意:运行目录要选择根目录“/”&#xff…

【c++】类和对象 - 类的引入和定义

1.类的引入 C语言结构体中只能定义变量,在C中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C方式实现,…

报错:AttributeError: ‘str‘ object has no attribute ‘decode‘

original_keras_version f.attrs[‘keras_version’].decode(‘utf8’) AttributeError: ‘str’ object has no attribute ‘decode’ 1、问题描述 original_keras_version f.attrs[keras_version].decode(utf8) AttributeError: str object has no attribute decode2、原…

【英语趣味游戏】填字谜(Crossword)第1天

谜题出处 柯林斯字谜大全(6),Collins——Big Book of Crosswords(Book 6) Puzzle Number: 114 本期单词 横向 1、Situation involving danger (4) 包含危险的情境,4个字母 答案:Risk&#xff…

Spark写入kafka(批数据和流式)

Spark写入(批数据和流式处理) Spark写入kafka批处理 写入kafka基础 # spark写入数据到kafka from pyspark.sql import SparkSession,functions as Fss SparkSession.builder.getOrCreate()# 创建df数据 df ss.createDataFrame([[9, 王五, 21, 男], […