【SpringSpringBoot】概述

news2024/11/20 20:33:08

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

漏洞原理反射型XSS漏洞

漏洞原理XSS漏洞 1 反射型XSS php基础链接 Web渗透编程语言基础-CSDN博客 正常思维 http://127.0.0.1/websec/day01/xss_reflect.php?name%E6%88%91%E6%98%AF%E8%B0%81 http://127.0.0.1/14_WEBSEC/DAY01/xss_reflect.php?name我是谁 黑客思维 http://127.0.0.1/websec…

【Python基础017】Python中如何进行异常判断(try...except...的使用)

1、异常判断 在python程序在运行的过程中可能会出现很多错误,比如语法、未定义变量、分母为0等错误;而我们通常使用try...except...语句来处理程序在运行中出现的这些异常,并显示出现错误的原因。此外,我们还可以用try...finally.…

Java多线程基础-18:线程安全的集合类与ConcurrentHashMap

Java标准库提供了很多集合类,但有一些集合类是线程不安全的,也就是说,在多线程环境下可能会出问题的。常用的ArrayList,LinkedList,HashMap,PriorityQueue等都是线程不安全的(Vector, Stack, Ha…

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

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

java 基础学习1

目录 一.注释 二.关键字 三.字面量 四.变量和标识符 五.键盘录入 六.运算符 一.注释 1.单行注释://注释信息 2.多行注释:/* 注释信息*/ 3.文档注释:/** 注释信息*/ 注:文档注释暂时用不上 二.关键字 关键字: 被Java赋予了特定…

任意一个函数都可以写成一个奇函数与一个偶函数之和的形式

定义 张宇30讲明确指出 f(x)f(-x)必定是偶函数 f(x)-f(-x)必定是奇函数 前提:定义域关于原点对称 由上述结论得到:任意一个函数都可以写成一个奇函数与一个偶函数之和的形式,即使该函数是非奇非偶的。 f(x) 1 2 \frac 12 21​[f(x) f(-x)]…

麒麟系统—— openKylin 安装 mongodb

麒麟系统—— openKylin 安装 mongodb 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载解压 MongoDB二、增加环境变量三、配置MongoDB创建数据目录创建日志文件运行 四、加入到服务中 MongoDB是一款高性能、开源的NoSQL数据库,因其灵活的数据结构、…

DCNv4:对视觉应用的动态和稀疏算子的重新思考

摘要 https://arxiv.org/pdf/2401.06197.pdf 我们介绍了可变形卷积v4(DCNv4),这是一种高效且有效的运算符,专为广泛的视觉应用而设计。DCNv4解决了其前身DCNv3的局限性,通过两个关键改进:1. 去除空间聚合中…

java抽象类概述——abstract关键字用法

前言: 打好基础,daydayup! 抽象类 抽象类概述 在java中有一个关键字叫abstract,代表抽象的意思,可用abstract修饰类,成员方法。 抽象类修饰方法 在方法或类前加上abstract关键字 例1:修饰类(在…

AI决策的解构与实践:初探可解释性技术(XAI)

随着人工智能(AI)技术在各个领域的广泛应用,解释性人工智能(XAI)的概念备受瞩目。作为开发者,我们深知AI系统的复杂性,以及对于用户和利益相关者来说理解AI决策过程的重要性。本文将深入探讨可解…

跟着pink老师前端入门教程-day12

二十六、HTML5CSS3的提高 1、HTML5 的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以…

MyBatis详解(5)-- MyBatis注解

MyBatis详解(5) 注解映射器xml配置文件的缺陷:常用注解1.基本注解:实现简单的增删改查操作。Insert 新增Options(useGeneratedKeys true, keyProperty "主键属性") 主键回填SelectKey ( statement "自增规则&qu…

漏洞复现-EduSoho任意文件读取漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

强化合作!浪潮信息携手业界伙伴筑牢算力底座

以太平金融科技服务(上海)有限公司(以下简称“太平金科”)为例,在算力新型基础设施建设方面,该公司一直不遗余力。近日,该公司更携手全球领先的IT基础设施供应商浪潮信息,优化算力基…

腾讯云幻兽帕鲁服务器创建教程,附4核16G服务器价格表

腾讯云0基础搭建帕鲁服务器4C16G14M服务器稳定无卡顿,先下载SteamCMD,并运行;然后下载Palserver,修改服务ini配置,启动PalServer,进入游戏服务器。腾讯云百科txybk.com分享腾讯云创建幻兽帕鲁服务器教程&am…

【Apollo CyberRT】源码分析之 “component” 模块

代码位置 apollo/cyber/component 功能 在自动驾驶系统中,模块(如感知、定位、控制系统等)在 Cyber ​​RT 下以 Component 的形式存在。不同 Component 之间通过 Channel 进行通信。Component 概念不仅解耦了模块,还为将模块拆…

Maven入门及其使用

目录 一、Maven入门 1.1 初识Maven 1.2 Maven的作用 1.2.1 依赖管理 1.2.2 统一项目结构 1.2.3 项目构建 1.3 Maven坐标 1.4 Maven仓库 1.4.1 Maven仓库概述 二、Maven的下载与安装 2.1 安装步骤 2.1.1 解压安装(建议解压到没有中文、特殊字符的路径下。&#xff09…

C语言-指针的基本知识(上)

一、关于内存 存储器:存储数据器件 外存 外存又叫外部存储器,长期存放数据,掉电不丢失数据 常见的外存设备:硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器,暂时存放数据,掉电数据…

【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 基础参数列表 模型版本选择 目标参数作…

Redis -- 前置知识

目录 简要 分布式系统 负载均衡 引入缓存 数据库分表 微服务 小结 简要 redis是存储数据在内存中, 定义变量就是在内存中, 但是redis是在分布式系统中, 才能真正发挥威力, 如果只是单机程序, 那么直接通过变量来存储数据的方式将是最优的选择. …