【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 …

7 图

图的分类 有向图 add(a,b)无向图 add(a,b) add(b,a) 名词解释 完全图&#xff1a;含有e (n-1)*n/2 条边的无向图有向完全图&#xff1a;含有e (n-1)*n 条边的有向图若边或弧的个数 e<nlogn&#xff0c;则称作稀疏图&#xff0c;否则称作稠密图简单路径&#xff1a;序列中…

LeetCode Hot100 回顾(一)

哈希 128.最长连续序列 要求复杂度为O(n)的算法, 通过两次遍历实现: 第一次遍历将所有元素插入到哈希表中, 第二次遍历过程中对每个元素n进行处理, 如果哈希表中存在值为n-1的元素, 则说明该元素已经被处理或即将被处理; 若不存在, 就继续查看值为n1, n2, n3…的元素是否存在…

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

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

动态规划——编辑距离问题

假设有a&#xff0c;b两个字符串&#xff0c;现对a字符串进行修改使得a字符串与b字符串完全一样&#xff1b;要求是使用最小的操作次数&#xff0c;使a&#xff0c;b字符串相等。操作有三种&#xff0c;分别是插入一个字符&#xff0c;删除一个字符&#xff0c;替换一个字符。 …

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

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

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

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

PostgreSQL15安装和实现物理复制(主从配置)全程指南

1 概述 本文介绍如何在centos7或rocky9下安装postgresql15&#xff0c;并配置物理复制的全过程。postgresql安装采用shell脚本安装&#xff0c;一键执行&#xff0c;通俗易懂。 2 环境说明 序号IP操作系统用途备注0110.10.0.41rockylinux9.3主库0210.10.0.42rockylinux9.3从…

【electron】安装网络问题处理

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

软件门槛之算法

软件门槛之算法 1.背景2.算法定义3.特征4.基本要素5.常用设计模式6.常用实现方法7.复杂度时间复杂度空间复杂度8.分类9.算法常用的一些工具10.算法的检验标准1.背景 一入行业深似海 再回首已是白发生! 工作这么多年了,感觉算法是比较难搞的。 写代码最重要的可能是框架和算法…

【Linux环境配置】core dump配置和快速gdb调试core文件

文章目录 0. 在Ubuntu系统中直接运行导致coredump的程序并没有生成core文件1. core dump 设置1.1 设置core文件格式1.2 设置core 大小限制 2. 写个代码测一下2.1 示例代码放入 test.c 中2.2 编译运行2.3 gdb调试一下core 3. 参考资料 0. 在Ubuntu系统中直接运行导致coredump的程…

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|…

React中antd的使用技巧

1.antd的基本使用&#xff1a; (1).yarn add antd(2).引入样式&#xff1a;import antd/dist/antd.css;(3).根据文档引入组件2.antd按需引入样式 (1).yarn add react-app-rewired customize-cra babel-plugin-import(2).修改package.json&#xff0c;内容如下&#xff1a;.....…

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翻转二…