【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

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

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

相关文章

2024三掌柜赠书活动第六期:人人都离不开的算法——图解算法应用

目录 前言算法概念图解算法应用算法的价值和挑战关于《人人都离不开的算法——图解算法应用》编辑推荐内容简介作者简介图书目录书中前言/序言书摘插画《人人都离不开的算法——图解算法应用》全书速览结束语 前言 作为开发者想必都知道,算法是现代社会中无处不在…

day33_js

今日内容 0 复习昨日 1 JS概述 2 JS的引入方式 3 JS语法 3.1 变量 3.2 基本数据类型 3.3 引用类型 3.4 数组类型 3.5 日期类型 3.6 运算符(算术运算,逻辑,关系运算,三目运算) 3.7 分支 3.8 循环 3.9 函数(重点) 3 常见弹窗函数 alter,confirm,prompt 0 复习昨日 1 盒子模型 对d…

兄弟MFC-8515DN黑白激光多功能一体机硒鼓及粉盒清零方法

耗材信息: 硒鼓DR-3350:约30000页; 墨粉盒TN-3335:约3000页【A4纸5%覆盖率】; 高容量墨粉盒TN-3385:约8000页【A4纸5%覆盖率】; 超高容量墨粉盒TN-3395:约12000页【A4纸5%覆盖率】&a…

php项目下微信小程序对接实战问题与解决方案

一.实战问题与方案总结 1.SQL查询条件是一组数,传参却是一个字符串导致报错,如下 SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from car_video where province_id in (1492) and city_id in (1493) and county_id …

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图,在基本信息设置里,可以设置处方配方模板,这样在开电子处方的时候可以一键导入…

计算机提示缺失dll文件怎么办?那种dll解决方法更值得推荐

当在运行游戏,软件程序的过程中遇到“找不到dll”的情况时,这实际上意味着系统或应用程序无法定位并加载必要的动态链接库文件(DLL),从而无法顺利完成预期的功能调用和执行流程。这种问题的发生可能会引发一系列严重后…

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目

最近完成了1个爬虫项目,记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称,使用Selenium, BS4等技术每天定时抓取亚马逊商品数据,使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能,显…

【electron】安装网络问题处理

目录 场景排查问题排查结论electron 安装失败解决方案 新的问题electron-builder 打包失败处理 场景 在mac上使用electron进行代码开发的时候,无法正常下载与electron、electron-builder相关的依赖 排查问题 是不是因为没有翻墙导致资源无法下载是不是没有设置正…

MC3172 串口模块

MC3172 支持12个串口对应关系如下 串口模块初始化 第一个是uart0~11 inpin RX 脚 管脚号 outpin TX脚 管脚号 baud 波特率 read_ptr ,数据读取指针 void uart_init(u32 uart_num,u8 in_pin,u8 out_pin,u32 baud,u8* read_ptr) {INTDEV_SET_CLK_RST(uart_num,(INTDEV_RUN|…

HCIP-三层架构实验

实验拓扑 实验需求 实验思路 配置IP地址 链路聚合 vlan配置 配置生产树 实验步骤 配置IP地址 以R1为例 <Huawei>sys [Huawei]sys r1 [r1]int g0/0/02 [r1-GigabitEthernet0/0/2]ip address 12.1.1.1 24 Jan 28 2024 17:09:03-08:00 r1 %%01IFNET/4/LINK_STATE(l…

一天吃透面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

vue中使用jweixin-module

目录 一&#xff1a;安装jweixin-module 二&#xff1a;后端配置 三&#xff1a;获取签名并注入配置 四&#xff1a;调用微信JS接口 在Vue项目中使用jweixin-module&#xff08;或通常称为jweixin&#xff0c;即微信JS-SDK的封装&#xff09;来调用微信提供的JS接口&#x…

二叉树

目录 1翻转二叉树 2对称二叉树 3二叉树的深度 最大深度 最小深度 4二叉树的结点数量 完全二叉树的结点数量 5平衡二叉树 6 中序 后序求前序 二叉树结构体如下&#xff1a; struct freenode {int data;struct freenode *lchild, *rchild;//左孩子 右孩子 }T; 1翻转二…

每日OJ题_算法_前缀和②_牛客DP35 【模板】二维前缀和

目录 二维前缀和原理 ②牛客DP35 【模板】二维前缀和 解析代码 二维前缀和原理 在一维数组前缀和算法的基础上&#xff0c;想到&#xff1a;计算二维数组前缀和&#xff0c;不就和计算一维数组前缀和一样&#xff0c;即计算每一个位置的前缀和就相当于&#xff1a; 此位置的…

VUE引入DataV报错记录

DataV官网&#xff08;不支持Vue3&#xff09;&#xff1a;Welcome | DataV 一、按照官网引入后报错 【1】 Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 将…

【Matlab】音频信号分析及FIR滤波处理——凯泽(Kaiser)窗

一、前言 1.1 课题内容: 利用麦克风采集语音信号(人的声音、或乐器声乐),人为加上环境噪声(窄带)分析上述声音信号的频谱,比较两种情况下的差异根据信号的频谱分布,选取合适的滤波器指标(频率指标、衰减指标),设计对应的 FIR 滤波器实现数字滤波,将滤波前、后的声音…

贪吃蛇/链表实现(C/C++)

本篇使用C语言实现贪吃蛇小游戏&#xff0c;我们将其分为了三个大部分&#xff0c;第一个部分游戏开始GameStart&#xff0c;游戏运行GameRun&#xff0c;以及游戏结束GameRun。对于整体游戏主要思想是基于链表实现&#xff0c;但若仅仅只有C语言的知识还不够&#xff0c;我们还…

学习笔记推荐:极客时间《Java常见错误100例》

最近&#xff0c;我有幸接触了一套非常精彩的学习笔记&#xff0c;《Java常见错误100例》。&#xff08;手册链接在文末&#xff01;&#xff01;&#xff01;&#xff09; 这套学习笔记出自极客时间&#xff0c;对于想要在 Java 开发领域深耕细作的朋友们来说&#xff0c;它无…

SpringBoot内置工具类

Collections java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合 一、排序 List<Integer> list new ArrayList<>();list.add(2);list.add(1);list.add(3);Collections.sort(list);//升序System.out.println(list);Collections.reverse(…

基于Python flask MySQL 猫眼电影可视化系统设计与实现

1 绪论 1.1 设计背景及目的 猫眼电影作为国内知名的电影信息网站&#xff0c;拥有海量的电影信息、票房数据和用户评价数据。这些数据对于电影市场的研究和分析具有重要意义。然而&#xff0c;由于数据的复杂性和数据来源的多样性&#xff0c;如何有效地采集、存储和展示这些数…