Spring源码

news/2024/7/8 12:12:46/文章来源:https://blog.csdn.net/Facial_Mask/article/details/127043696

这里写目录标题

  • 第一章:Spring引言
    • 一:当前Spring的一个地位
    • 二: SpringBoot的真正的价值
      • 1:方便导入Jar包
      • 2:简化冗余配置
      • 3:内嵌了Tomcat

第一章:Spring引言

一:当前Spring的一个地位

Spring准确的来讲是一套解决方案,是一个技术栈,是一个全家桶
从起初的Spring,到因为要进行web开发引入了SpringMVC,到为了后来的快捷开发,引入了Springboot,在到后来的微服务,也就是SpringCloud。
Spring能有以上这么优秀的离不开Spring核心当中的两大特性,IOC和AOP,Spring能完成这么复杂的生态的构建离不开这两大伟大的特性。
SpringMVC本质上就是由spring+mvc这两大部分组成,任何一个MVC框架都离不开MVC的内容和影子。

二: SpringBoot的真正的价值

SpringBoot不要把他妖魔化,SpringBoot真正的价值是:简化了Spring和SpringMVC的开发。
他本质上没有什么新的东西,他本质上就是对Spring和SpringMVC的简化:

1:方便导入Jar包

我们现在都是基于maven导入依赖的,maven我们都是自己引入依赖,但是boot觉得这样太麻烦了,他引入了starter,方便引入导入jar包

2:简化冗余配置

Spring从原始的xml到后续的注解,已经简化了,但是还是太麻烦,Spring
boot再次基础上再次进行了封装,简化冗余配置。

3:内嵌了Tomcat

内嵌Tomcat对我们来讲是一个非常重要的特性,两大好处
1:内嵌了Tomcat好处1
好处的背景:
解决了SpringMVC父子容器的问题。这是原有springMVC开发需要面对和解决的问题
在SpringMVC开发中,是如何解决父子容器的呢?
首先知道,SpringMVC开发过程中,是有两个Spring工厂的。回忆一下SpringMVC的配置:

在这里插入图片描述

DispatcherServlet:SpringMVC当中的前端控制器
init-param:我们还需要执行Spring的配置文件,指定spring的配置文件

DispatcherServlet本质上就是一个Spring的工厂,他是servlet但是内部封装了一个Spring的工厂
ContextLoaderListerner这个spring的一个监听器。这个listener本质上就是一个创建了spring工厂的listener,有这两个工厂并存,ContextLoaderListerner是父工厂,dispatcherServlet是子工厂
带来的问题:
Controller当中获取Service的时候,在Service当中配置了事务,但是事务不生效。
父工厂当中创建了Service,添加了事务,但是在子工厂当中,也同样创建了Service,但是没有事务,Controller是子工厂帮我们创建的,这个时候,就会获取子工厂的service,这样就是没有事务了。

问题的解决方案:
子工厂不要创建Service,去调用父工厂的Service。这是MVC开发过程中注明的父子容器的问题。
SpringBoot没有父子容器的问题,SpringBoot是内嵌Tomcat,他自己不需要解决了这个问题。不需要你程序员外部激活。

2:内嵌了Tomcat好处2
Web开发的启动进程,是通过Tomcat为载体启动进程的,换句话说一个Tomcat就是一个进程,但是SpringBoot内嵌了Tomcat之后,就可以通过运行jar包的方式去启动web服务,也就是启动一个服务进程,这样就可以多个Tomcat进程。轻松将一个大的web服务,轻松启动提供服务。对外发送请求,接收相应。也就提供了将一个web服务轻松进行拆分的条件,这也就解释了,一个SpringCloud必须嫁接于SpringBoot的原因。
除了这玩意,之后的好处跟SpringBoot毛关系都没有。

3:但是,如果没有SpringBoot,我们可以做微服务开发么?
当然是可以的。
没有SpringBoot,我们依然可以有类似于SpringCloud的微服务方案,我们完全可以使用Spring+SpringMVC去搭建微服务方案。

微服务是一个架构思想,他解决了分布式的很多问题,SpringCloud只是其中的一个解决方案
甚至我们可以脱离Java的体系,使用go来进行微服务编程,当前的go,Java都能干这事。

SpringBoot和SpringCloud都是停留在应用层,真正的核心体系,还是在Spring和SpringMVC当中。

4:Spring源码特点

1.枯燥,mybatis顶多算是spring的一个模块。
2.方方面面都要掌握,
3.课程源码学习的内容:
Spring容器技术:IOC
xml读取,存储,对象创建,加工,缓存,分析
AOP代理设计:Spring真正把代理设计融入到Spring体系当中。
事务:Spring是如何进行事务处理的,Spring与mybatis源码整合,现有持久化方案,在来讨论事务处理

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

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

相关文章

Python中dict[key]=vlaue更新字典中键的值

【小白从小学Python、C、Java】 【Python-计算机等级考试二级】 【Python-数据分析】 更新字典中键的值,如果键值不存在,则创建键值对 dict[key]vlaue 方法 [太阳]选择题 对于以下Python代码表述有误的选项是? d {"name":"小…

第四十四章 使用多个 IRIS 实例(四)

文章目录第四十四章 使用多个 IRIS 实例(四)配置多个 IRIS 实例设置端口号第四十四章 使用多个 IRIS 实例(四) 配置多个 IRIS 实例 可以在一台机器上安装并同时运行多个 IRIS 实例。像单一安装一样安装 IRIS,为每个实…

JDK 19 / Java 19 正式发布

近日,甲骨文公司正式发布Java 19,这是备受欢迎的编程语言和开发平台推出的全新版本。Java19 (Oracle JDK 19) 在性能、稳定性和安全性方面进行了数千种改进,包括进一步优化平台的增强功能,以帮助开发人员提高工作效率,…

学习:网络基础知识 HTTP协议之响应报文

响应报文-服务器回应给客户端的报文 响应行+响应头部+空一行(格式代表响应头部结束)+响应体(服务器真真要返回的页面内容) 可以百度HTTP状态码可以看到详细的介绍 响应头部 主要关注:Set-Cookies ,Connection

好课 / 平台推荐

1. 好课 / 平台推荐 1.1. 学堂在线 清华名师的在线课堂 推荐 《积极心理学》 1.2. Cousera 国际名校网课 推荐 《AI for everyone》 1.3. 爱课堂 (中国大学 MOOC) 教育部慕课好课 推荐 《程序设计》(翁凯) 1.4. EDX 哈佛、MIT 藤校网课 推荐 《CS50》 1.5. 网易公…

Mapped Statements collection already contains value for ... 报错原因及解决办法

文章目录一、Mapped Statements collection already contains value for...1. 异常报错描述:1.1 详细描述1:2. 异常报错信息案例:2.1 案例1:2.1.1 异常错误描述:2.1.2 解决方案:一、Mapped Statements coll…

关系模型知识点总结(1)—— 关系数据结构

关系数据结构一、前言二、概述三、关系的定义及相关概念1.域(Domain)2.基数3.元组4.分量5.笛卡儿积6.关系7.关系的目/度8.属性四、关系的码1.候选码2.主码、主属性、非码属性3.全码4.外码五、关系的性质六、关系模式和关系数据库1.关系数据库2.关系数据库…

多御安全浏览器迎来小更新,优化后更方便使用

每个人的电脑都有一款不可或缺的软件应用,那就是浏览器。作为上网的媒介,浏览器为我们的生活提供了很多便利的服务。近日,多御安全浏览器又迎来了一次小更新,这次更新主要是对浏览器进行优化,更加方便用户使用了。一起…

计算空间物体包围球的两种算法实现_charlee44的博客

1. 概述 在进行二维空间几何运算的之前,往往会用包围盒进行快速碰撞检测,从而筛掉一些无法碰撞到的可能。而在三维中,比较常用的就是包围球了。当然,如何计算包围球是一个问题。 2. 详论 2.1. naive算法 一个最简单的思路就是,计算空间顶点在X、Y、Z方向上的最大值和最小值…

linux配置当前用户java环境

cd ~ ls -al 这里可以看到一个 .bash_profile 的文件 然后vim 它 vim .bash_profile 插入如下代码 PATH=$PATH:$HOME/binexport JAVA_HOME=/apps/upgrade_sjzx/jdk/jdk1.8.0_162export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/b…

JAVA代码操作HDFS

1、客户端环境准备 (1)将Hadoop-2.9.2安装包解压到非中文路径(例如:E:\hadoop-2.9.2) (2) 配置HADOOP_HOME环境变量 (3) 配置Path环境变量。 (4)…

使用SqlSugar连接多个数据库(sqlserver,sqlite,mysql)

有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候&am…

多测师肖sir_疑难杂症_linux中设置中文,数据库中插入中文

一、linux中如何切换出中文 讲解是Centos6.5版本 (1)第一步打开控制台输入安装中文输入法: yum install “Chinese Support” (2)查清自己目前的系统版本:cat /etc/issue 查看系统版本: 下载好…

操作系统漏洞利用思路

目录 前言: (一)漏洞发现工具 0x01、Goby 0x02、Nmap 1、vuln 2、vulscan 0x03 Nessus (二)漏洞利用 0x01、框架利用 0x02、单点EXP 0x03 搜索文章 (三)修补 1、打上补丁 2、关闭…

node.js基于微信小程序的外卖订餐系统 uniapp 小程序

美食是人类永恒的话题,无论是在古代还是现代人们对美食都有一种非常的热爱在里面,但是随着时代的发展,人们可能没有更多的时间去研究美食,很多时候人们在下班或者放学之后更希望通过网络来进行订餐,为此我开发了本基于…

顺序栈和链式栈(C++实现)

数据结构(面向对象方法与C语言描述)(第2版)顺序栈和链式栈内容整理 栈 栈(stack)可定义为只允许在表的末端进行插入和删除的线性表。允许插入和删除的一端叫做栈顶(top)&#xff0…

学习:网络基础知识 HTTP协议之请求报文

HTTP协议 和 安全版 HTTPS协议 HTTP(Hyper Text Transfer Protocol)超文本传输协议 HTTP协议 是基于TCP协议 默认端口是80 功能:用来规定客户端和服务端的数据传输格式 特点:基于请求与响应模式的、无状态、无连接的应用层协议 示例:粉色部分是请求 紫色是响应部分 HTTP请…

Pro09丨高频波动率RSJ与成交量因子迭代升级

量化策略开发,高质量社群,交易思路分享等相关内容 『正文』 ˇ 大家好,今天我们分享Pro系列第9篇量化策略及内容说明。 在2021年7月中,某开源平台发布一个研报策略复现文章,而后大家象征性的积极讨论了一番&#xf…

大裁员时代,我们究竟该如何提升自己?

我以为进大厂可以逃过 35 岁的坎儿,结果还没到 35 呢就遇上了大裁员。。。被裁的那一个月,我拿着公司给的 2N 在家躺了大半个月,刚开始是不甘,到后面每个月一万多的房贷催着我不得不重新审视自己,随后踏上了海投之路。…

贤鱼的刷题日常--P2671 [NOIP2015 普及组] 求和

🏆今日学习目标: 🍀学会求和题目 ✅创作者:贤鱼 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c 求和题目[NOIP2015 普及组] 求和题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例…